Con trăn 3
for f, b in zip(foo, bar):
print(f, b)
zipdừng lại khi ngắn hơn foohoặc bardừng lại.
Trong Python 3 , zip
trả về một iterator của các bộ dữ liệu, như itertools.iziptrong Python2. Để có được một danh sách các bộ dữ liệu, sử dụng list(zip(foo, bar)). Và để nén cho đến khi cả hai trình lặp hết, bạn sẽ sử dụng
itertools.zip_longest .
Con trăn 2
Trong Python 2 , zip
trả về một danh sách các bộ dữ liệu. Điều này là tốt khi foovà barkhông lớn. Nếu cả hai đều lớn thì hình thành zip(foo,bar)là một biến tạm thời lớn không cần thiết và nên được thay thế bằng itertools.iziphoặc
itertools.izip_longest, trả về một trình vòng lặp thay vì danh sách.
import itertools
for f,b in itertools.izip(foo,bar):
print(f,b)
for f,b in itertools.izip_longest(foo,bar):
print(f,b)
izipdừng lại khi foohoặc barlà hết
izip_longestdừng lại khi cả hai foovà barkiệt sức. Khi (các) trình lặp ngắn hơn đã hết, izip_longestsẽ tạo ra một tuple với Nonevị trí tương ứng với trình vòng lặp đó. Bạn cũng có thể thiết lập một sự khác biệt fillvaluebên cạnh Nonenếu bạn muốn. Xem ở đây để biết toàn bộ câu chuyện .
Cũng lưu ý rằng zipvà anh em zipgiống như nó có thể chấp nhận một số lượng lặp tùy ý làm đối số. Ví dụ,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
in
1 red manchego
2 blue stilton
3 green brie
izip(mặc dùizip/ziptrông sạch hơn nhiều)?