Пітон 3
for f, b in zip(foo, bar):
print(f, b)
zipзупиняється, коли коротше fooабо barзупиняється.
В Python 3 , zip
повертає ітератор кортежів, як itertools.izipв python2. Щоб отримати список кортежів, використовуйте list(zip(foo, bar)). І щоб поштовувати, поки обидва ітератора не вичерпані, ви б використовували
itertools.zip_lo most .
Пітон 2
В Python 2 , zip
повертає список кортежів. Це добре, коли fooі barне є масовим. Якщо вони обидва масивні, то формування zip(foo,bar)- це надмірно масивна тимчасова змінна, і її слід замінити на itertools.izipабо
itertools.izip_longest, що повертає ітератор замість списку.
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)
izipзупиняється, коли fooабо barвиснажується.
izip_longestзупиняється, коли обоє fooі barвиснажуються. Коли коротші ітератори (итератори) вичерпані, izip_longestвиводиться кортеж із Noneположенням, відповідним цьому ітератору. Ви також можете встановити інший , fillvalueкрім , Noneякщо ви хочете. Дивіться тут для повної історії .
Зауважте також, що zipі його zipподібний бретен може приймати довільну кількість ітерабелів як аргументів. Наприклад,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
відбитки
1 red manchego
2 blue stilton
3 green brie
izip(навіть якщоizip/zipвиглядає набагато чистіше)?