2015-10-15 13 views
5

Tôi đang sử dụng đoạn mã sau (xấu xí) để lặp qua danh sách hai chiều bằng chuỗi. Nó kiểm tra xem một trong các giá trị có phải là '0' hay không và đó có phải là phần tử cuối cùng không. Nếu không, nó sẽ chuyển đổi các giá trị của phần tử hiện tại (là '0') với giá trị của phần tử tiếp theo.Đẩy tất cả non-'0 'về phía trước

Điều tôi định thực hiện với chức năng này là đẩy tất cả các giá trị không phải là '0' về phía sau. Nó rõ ràng là không hoạt động như mong đợi (đó là một sự khởi đầu), nhưng tôi không thể tìm ra cách để thực hiện điều này mà không biến nó thành một mớ hỗn độn lớn.

Phần còn thiếu trong câu đố là gì? Sẽ đệ quy giúp đỡ ở đây?

['0', '2', '0', '4'] 

nên trở thành

['2', '4', '0', '0'] 

['0', '3', '1', '0', '2'] 

thành

['3', '1', '2', '0', '0'] 

đoạn hiện tại:

for idx, x in enumerate(self.list_x): 
    for idy, i in enumerate(x): 
     if i == '0': 
      try: 
       if x[idy+1]: 
        pass 
      except IndexError: 
       pass 
      else: 
       temp = i 
       self.list_x[idx][idy] = x[idy+1] 
       self.list_x[idx][idy+1] = temp 

Trả lời

4
In [63]: A = ['0', '2', '0', '4'] 

In [64]: B = ['0', '3', '1', '0', '2'] 

In [65]: [i for i in A if i!='0'] + [i for i in A if i=='0'] 
Out[65]: ['2', '4', '0', '0'] 

In [66]: [i for i in B if i!='0'] + [i for i in B if i=='0'] 
Out[66]: ['3', '1', '2', '0', '0'] 
+1

Vui lòng xem xét chỉnh sửa bài viết của bạn để thêm lời giải thích thêm về những gì mã của bạn không và tại sao nó sẽ giải quyết vấn đề. Một câu trả lời mà hầu hết chỉ chứa mã (ngay cả khi nó hoạt động) thường không giúp OP hiểu được vấn đề của họ. – SuperBiasedMan

0
In [79]: L = ['0', '2', '0', '4'] 

In [80]: inds = [i for i,e in enumerate(L) if e!='0'] 

In [81]: answer = list(operator.itemgetter(*inds)(L)) + ['0']*(len(L)-len(inds)) 

In [82]: answer 
Out[82]: ['2', '4', '0', '0'] 
Các vấn đề liên quan