2009-10-23 8 views
6

así que tengo tres listas:En Python, ¿puedo imprimir 3 listas ordenadas por número de índice?

['this', 'is', 'the', 'first', 'list'] 
[1, 2, 3, 4, 5] 
[0.01, 0.2, 0.3, 0.04, 0.05] 

¿Hay alguna manera de que me permitiera imprimir los valores de estas listas en orden por índice?

p. Ej.

this, 1, 0.01 (all items at list[0]) 
is, 2, 0.2 (all items at list[1]) 
the, 3, 0.3 (all items at list[2]) 
first, 4, 0.04 (all items at list[3]) 
list, 5, 0.05 (all items at list[4]) 

El número de elementos en cada lista varía cada vez que se ejecuta la secuencia de comandos, pero siempre terminan con el mismo número de valores en el final. Así que, una vez, el guión podría crear tres matrices con 30 artículos, en otro momento, podría crear sólo 15 valores en cada uno, etc.

Respuesta

9

Lo que es probable que esté buscando se llama zip:

>>> x = ['this', 'is', 'the', 'first', 'list'] 
>>> y = [1, 2, 3, 4, 5] 
>>> z = [0.01, 0.2, 0.3, 0.04, 0.05] 
>>> zip(x,y,z) 
[('this', 1, 0.01), ('is', 2, 0.20000000000000001), ('the', 3, 0.29999999999999999), ('first', 4, 0.040000000000000001), ('list', 5, 0.050000000000000003)] 
>>> for (a,b,c) in zip(x,y,z): 
...  print a, b, c 
... 
this 1 0.01 
is 2 0.2 
the 3 0.3 
first 4 0.04 
list 5 0.05 
+1

También deben mencionarse: itertools.izip, que crea un generador de el resultado. –

+0

Gracias! ¡Funciona de maravilla! Formatos muy bien y todo. –

3

Use zip

for items in zip(L1, L2, L3): 
    print items 

items será una tupla con un valor de cada lista, en orden.

0
lists = (['this', 'is', 'the', 'first', 'list'], 
      [1, 2, 3, 4, 5], 
      [0.01, 0.2, 0.3, 0.04, 0.05]) 
print zip(*lists) 

cremalleras las listas juntas y se detiene cuando la lista más corta se queda sin elementos.

0

Ésta es la forma más evidente de inmediato (a un Novato pitón), y es posible que haya una mejor manera, pero aquí va:

#Your list of lists. 
uberlist = (list1, list2, list3) 

#No sense in duplicating this definition multiple times. 
#Define it up front. 
uberRange = range(len(uberList)); 

#Since each will be the same length, you can use one range. 
for i in range(len(list1)): 
    # Iterate through the sub lists. 
    for j in uberRange: 
     #Output 
     print uberlist[ j ][ i ]; 
+0

Aunque su solución funciona, zip es más pitónico (y más corto). –

+0

Sí, no me sorprende que haya una mejor manera. Solo he estado mirando a Python durante algunas semanas (si es así), así que estoy seguro de que la mayoría de mis intentos seguirán siendo el "camino más largo". – cwallenpoole

+0

También apostaría a que el zip es más rápido: mi respuesta fue escrita en Python, zip es un método de compilación. – cwallenpoole

Cuestiones relacionadas