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)?