Python 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_longest .
Python 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выглядит намного чище)?