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)?zip
yzip
-como funciones deitertools
aceptar cualquier número de iterables y no sólo 2? Esta pregunta es canónica ahora y su respuesta es la única que vale la pena actualizar.i
? ¿Puedo envolver ese zip en enumerate?for i, (f, b) in enumerate(zip(foo, bar))
.Tú quieres la
zip
función.fuente
itertools.izip
si tiene una gran cantidad de elementos.Debe usar la función ' zip '. Aquí hay un ejemplo de cómo puede verse su propia función zip
fuente
zip(seq1, seq2)
?Puede agrupar los enésimos elementos en una tupla o lista usando la comprensión, luego pasarlos con una función generadora.
fuente
En caso de que alguien esté buscando algo como esto, lo encontré muy simple y fácil:
Las listas se iterarán con su contenido completo, a diferencia de zip (), que solo itera hasta la longitud mínima de contenido.
fuente
Aquí se explica cómo hacerlo con la comprensión de la lista:
huellas dactilares:
fuente