Python 3
for f, b in zip(foo, bar):
print(f, b)
zip
se detiene cuando el más corto foo
o se bar
detiene.
En Python 3 , zip
devuelve un iterador de tuplas, como itertools.izip
en Python2. Para obtener una lista de tuplas, use list(zip(foo, bar))
. Y para comprimir hasta que se agoten ambos iteradores, usaría
itertools.zip_longest .
Python 2
En Python 2 , zip
devuelve una lista de tuplas. Esto está bien cuando foo
y bar
no son masivos. Si ambos son masivos, la formación zip(foo,bar)
es una variable temporal innecesariamente masiva y debe reemplazarse por itertools.izip
o
itertools.izip_longest
, que devuelve un iterador en lugar de una 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
se detiene cuando foo
o bar
está agotado.
izip_longest
se detiene cuando ambos foo
y bar
están agotados. Cuando los iteradores más cortos están agotados, izip_longest
produce una tupla None
en la posición correspondiente a ese iterador. También puede establecer una diferente fillvalue
además None
si lo desea. Vea aquí la historia completa .
Tenga en cuenta también que zip
y su zip
breen-like puede aceptar un número arbitrario de iterables como argumentos. Por ejemplo,
for num, cheese, color in zip([1,2,3], ['manchego', 'stilton', 'brie'],
['red', 'blue', 'green']):
print('{} {} {}'.format(num, color, cheese))
huellas dactilares
1 red manchego
2 blue stilton
3 green brie
izip
(aunque elizip
/ sezip
ve mucho más limpio)?