2012-04-09 43 views
32

Digamos que tengo dos o más listas de la misma longitud. ¿Cuál es una buena forma de iterar a través de ellos?Mejor manera de iterar en dos o varias listas a la vez

a, b son las listas.

for i, ele in enumerate(a): 
    print ele, b[i] 

o

for i in range(len(a)): 
    print a[i], b[i] 

o hay alguna variante que me falta?

¿Hay alguna ventaja particular de usar una sobre otra?

Respuesta

76

La forma más habitual es utilizar zip():

for x, y in zip(a, b): 
    # x is from a, y is from b 

Esto detendrá cuando el más corto de los dos iterables a y b se agota. También vale la pena señalar: itertools.izip() (solo Python 2) y itertools.izip_longest() (itertools.zip_longest() en Python 3).

+4

se me adelantó. Vale la pena señalar que el 'zip' * de Python 3 es *' izip'. Además, no hay 'zip_longest' pero' map (None, a, b) 'puede hacer. – ephemient

+2

@ephemient: este último solo en Python 2, nuevamente. En Python 3, esto se detendrá en la secuencia más corta. Y 'izip_longest()' se llama 'zip_longest()' en Python 3 ... –

7

Puede utilizar zip:

>>> a = [1, 2, 3] 
>>> b = ['a', 'b', 'c'] 
>>> for x, y in zip(a, b): 
... print x, y 
... 
1 a 
2 b 
3 c 
Cuestiones relacionadas