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
выглядит намного чище)?zip
иzip
-подобные функции могутitertools
принимать любое количество повторений, а не только 2? Этот вопрос сейчас каноничен, и ваш ответ - единственный, который стоит обновить.i
? Могу ли я обернуть этот почтовый индекс в перечислять?for i, (f, b) in enumerate(zip(foo, bar))
.Вы хотите
zip
функцию.источник
itertools.izip
если у вас есть большое количество элементов.Вы должны использовать функцию « zip ». Вот пример того, как может выглядеть ваша собственная функция zip
источник
zip(seq1, seq2)
?Вы можете связать n-е элементы в кортеж или список, используя понимание, а затем передать их с помощью функции генератора.
источник
В случае, если кто-то ищет что-то подобное, я нахожу это очень простым и легким:
Списки будут повторяться со своим полным содержимым, в отличие от zip (), который повторяет только до минимальной длины содержимого.
источник
Вот как это сделать со списком:
печатает:
источник