2012-04-09 37 views
32

Giả sử tôi có hai hoặc nhiều danh sách có cùng độ dài. Một cách hay để lặp qua chúng là gì?Cách tốt hơn để lặp qua hai hoặc nhiều danh sách cùng một lúc

a, b là các danh sách.

for i, ele in enumerate(a): 
    print ele, b[i] 

hoặc

for i in range(len(a)): 
    print a[i], b[i] 

hoặc có bất kỳ biến thể tôi đang thiếu?

Có lợi thế cụ thể nào khi sử dụng cái khác không?

Trả lời

76

Cách thông thường là sử dụng zip():

for x, y in zip(a, b): 
    # x is from a, y is from b 

này sẽ dừng lại khi ngắn hơn của hai iterables ab đang cạn kiệt. Cũng đáng chú ý: itertools.izip() (chỉ có Python 2) và itertools.izip_longest() (itertools.zip_longest() bằng Python 3).

+4

đánh bại tôi vào nó. Có thể đáng lưu ý rằng 'zip' * của Python 3 là * 'izip'. Ngoài ra, không có 'zip_longest' nhưng' map (None, a, b) 'có thể làm. – ephemient

+2

@ephemient: Chỉ sau trên Python 2, một lần nữa. Trên Python 3, điều này sẽ dừng lại trên chuỗi ngắn nhất. Và 'izip_longest()' được gọi là 'zip_longest()' trên Python 3… –

7

Bạn có thể sử dụng zip:

>>> a = [1, 2, 3] 
>>> b = ['a', 'b', 'c'] 
>>> for x, y in zip(a, b): 
... print x, y 
... 
1 a 
2 b 
3 c 
Các vấn đề liên quan