2012-07-28 21 views
14

Per esempio, ho una lista come questa:Come aggiungo due elementi di elenchi in un elenco?

list1 = [good, bad, tall, big] 

list2 = [boy, girl, guy, man] 

e voglio fare una lista come questa:

list3 = [goodboy, badgirl, tallguy, bigman] 

ho provato qualcosa di simile a questi:

list3=[] 
list3 = list1 + list2 

ma questo conterrebbe solo il valore di list1

Così ho usato for:

list3 = [] 
for a in list1: 
for b in list2: 
    c = a + b 
    list3.append(c) 

ma si tradurrebbe in troppe liste (in questo caso, 4 * 4 = 16 di loro)

Cosa devo fare? Qualsiasi aiuto sarebbe davvero fantastico!

risposta

21

È possibile utilizzare list comprehension con zip:

list3 = [a + b for a, b in zip(list1, list2)] 

zip produce una lista di tuple, combinando elementi iterables si dà. Quindi nel tuo caso, restituirà coppie di elementi da list1 e da list2, fino a esaurimento.

+0

grazie! mi ha davvero aiutato! :) –

+0

+1 Il modo migliore per farlo in python. – jamylak

+1

Con il senno di poi, probabilmente raccomanderei qualcosa di simile alla soluzione 'map' da una delle altre risposte:' map (operator.add, list1, list2) '. Tuttavia, usare le funzioni binarie + con 'map' è una caratteristica meno conosciuta rispetto alla comprensione delle liste. – Xion

1

Una soluzione che utilizza un loop che si prova è a senso unico, più intuitiva rispetto alla soluzione Xions.

list3 = [] 
for index, item in enumerate(list1): 
    list3.append(list1[index] + list2[index]) 

Questo funzionerà anche per una soluzione più breve. Usando la mappa() e lambda, preferisco questo oltre zip, ma questo fino a tutti

list3 = map(lambda x, y: str(x) + str(y), list1, list2); 
+1

Perché utilizzare enumerare se non si utilizza 'item'? – Lenna

+0

Nessun motivo. Solo per ottenere l'indice, immagino che potresti usare anche a range(), ma sono abituato a questo modo. –

+1

Si potrebbe avere 'list3.append (item + list2 [index])' all'interno del ciclo in modo da usare 'item'. – Xion

0

per questo e due elenco delle stesse dimensioni si può anche utilizzare in questo modo:

for i in range(len(list1)): 
    list3[i]=list1[i]+list2[i] 
0

utilizzando zip

list3 = [] 
for l1,l2 in zip(list1,list2): 
    list3.append(l1+l2) 

list3 = ['goodboy', 'badgirl', 'tallguy', 'bigman']

Problemi correlati