2009-10-23 6 views
6

Così ho tre liste:In Python, posso stampare 3 elenchi in ordine per numero di indice?

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

C'è un modo che mi permettesse di stampare i valori di queste liste in ordine di indice?

ad es.

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

Il numero di elementi in ciascuna lista varia ogni volta che viene eseguito lo script, ma finiscono sempre con lo stesso numero di valori, alla fine. Quindi, una volta, lo script potrebbe creare tre array con 30 elementi, un altro tempo, si potrebbe creare solo 15 valori di ogni, ecc

risposta

9

Quello che state probabilmente cercando si chiama 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

anche di essere menzionati: itertools.izip, che crea un generatore per il risultato. –

+0

Grazie! funziona come un fascino! Formati bene e tutto. –

3

Utilizzare zip

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

items sarà una tupla con un valore da ciascuna lista, in ordine.

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) 

cerniere le liste insieme e si ferma quando la lista più breve esaurisce elementi.

0

Questo è il modo più immediatamente evidente (ad un newb pitone), e non v'è probabilmente un modo migliore, ma qui 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

Sebbene la soluzione funzioni, zip è più pitone (e più corto). –

+0

Sì, non sono sorpreso che ci sia un modo migliore. Ho solo guardato Python per alcune settimane (se è così), quindi sono sicuro che la maggior parte dei miei tentativi sarà ancora il "lungo cammino". – cwallenpoole

+0

Scommetto anche che zip è più veloce: la mia risposta è stata scritta in Python, zip è un metodo built-in. – cwallenpoole

Problemi correlati