Пітон 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
виглядає набагато чистіше)?