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