2012-06-03 35 views
27

tôi stumbled trên đoạn mã sau:tuple giải nén trong cho vòng

for i,a in enumerate(attributes): 
    labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W)) 
    e = Entry(root) 
    e.grid(column=1, row=i) 
    entries.append(e) 
    entries[i].insert(INSERT,"text to insert") 

Tôi không hiểu 'i, một' bit và tìm kiếm google để biết thông tin về 'cho' là một cơn đau ở mông và khi tôi thử và thử nghiệm với mã tôi nhận được thông báo lỗi:

ValueError: need more than 1 value to unpack

Có ai biết nó làm gì hoặc làm gì với nó mà tôi có thể tìm hiểu thêm?

Trả lời

49

Bạn có thể google vào "giải nén tuple". Điều này có thể được sử dụng ở nhiều nơi trong Python. Cách đơn giản nhất là trong nhiệm vụ

>>> x = (1,2) 
>>> a, b = x 
>>> a 
1 
>>> b 
2 

Trong vòng lặp cho nó hoạt động tương tự. Nếu mỗi phần tử của iterable là một bộ tuple, thì bạn có thể chỉ định hai biến và mỗi phần tử trong vòng lặp sẽ được giải nén cho cả hai.

>>> x = [(1,2), (3,4), (5,6)] 
>>> for item in x: 
...  print "A tuple", item 
A tuple (1, 2) 
A tuple (3, 4) 
A tuple (5, 6) 
>>> for a, b in x: 
...  print "First", a, "then", b 
First 1 then 2 
First 3 then 4 
First 5 then 6 

Hàm liệt kê tạo ra một bộ tuple có thể lặp lại, do đó, nó có thể được sử dụng theo cách này.

1

Chức năng enumerate trả về một đối tượng phát đó, tại mỗi lần lặp, mang lại một tuple chứa chỉ số của phần tử (i), được đánh số bắt đầu từ 0 theo mặc định, kết hợp với các yếu tố tự (a), và for loop thuận tiện cho phép bạn truy cập cả hai trường của các bộ dữ liệu được tạo ra đó và gán các tên biến cho chúng.

6

Liệt kê cơ bản cung cấp cho bạn chỉ mục hoạt động trong vòng lặp for. Vì vậy:

for i,a in enumerate([4, 5, 6, 7]): 
    print i, ": ", a 

Sẽ in:

0: 4 
1: 5 
2: 6 
3: 7 
4

Hãy mã này là một ví dụ:

elements = ['a', 'b', 'c', 'd', 'e'] 
index = 0 

for element in elements: 
    print element, index 
    index += 1 

Bạn lặp trên danh sách và lưu trữ một biến chỉ số là tốt. enumerate() làm điều tương tự, nhưng ngắn gọn hơn:

elements = ['a', 'b', 'c', 'd', 'e'] 

for index, element in enumerate(elements): 
    print element, index 

Ký hiệu index, element là cần thiết vì lợi nhuận enumerate một tuple ((1, 'a'), (2, 'b') ...) được giải nén vào hai biến khác nhau.

2
[i for i in enumerate(['a','b','c'])] 

Kết quả:

[(0, 'a'), (1, 'b'), (2, 'c')] 
Các vấn đề liên quan