Python 3
for f, b in zip(foo, bar):
print(f, b)
zip
para quando o mais curto foo
ou bar
para.
No Python 3 , zip
retorna um iterador de tuplas, como itertools.izip
no Python2. Para obter uma lista de tuplas, use list(zip(foo, bar))
. E para compactar até que ambos os iteradores estejam esgotados, você usaria
itertools.zip_longest .
Python 2
No Python 2 , zip
retorna uma lista de tuplas. Isso é bom quando foo
e bar
não é maciço. Se ambos são maciços, a formação zip(foo,bar)
é uma variável temporária desnecessariamente maciça e deve ser substituída por itertools.izip
ou
itertools.izip_longest
, que retorna um iterador em vez de uma lista.
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
para quando um foo
ou bar
está esgotado.
izip_longest
pára quando ambos foo
e bar
estão esgotados. Quando o (s) iterador (es) mais curto (s) estão esgotados, izip_longest
produz uma tupla None
na posição correspondente a esse iterador. Você também pode definir uma diferente fillvalue
além de None
se desejar. Veja aqui a história completa .
Observe também que zip
e seus zip
irmãos semelhantes podem aceitar um número arbitrário de iteráveis como argumentos. Por exemplo,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
impressões
1 red manchego
2 blue stilton
3 green brie
izip
(mesmo que oizip
/zip
pareça muito mais limpo)?zip
ezip
likeitertools
aceitam qualquer número de iterables e não apenas 2? Esta pergunta é canônica agora e sua resposta é a única que vale a pena atualizar.i
? Posso agrupar esse zip em enumerar?for i, (f, b) in enumerate(zip(foo, bar))
.Você quer a
zip
função.fonte
itertools.izip
se tiver um grande número de elementos.Você deve usar a função ' zip '. Aqui está um exemplo de como sua própria função zip pode parecer
fonte
zip(seq1, seq2)
?Você pode agrupar os enésimos elementos em uma tupla ou lista usando compreensão e distribuí-los com uma função geradora.
fonte
Caso alguém esteja procurando algo assim, achei muito simples e fácil:
As listas serão iteradas com seu conteúdo completo, diferentemente do zip (), que itera apenas até o tamanho mínimo do conteúdo.
fonte
Veja como fazer isso com compreensão de lista:
impressões:
fonte