2012-07-28 24 views
14

Por ejemplo, tengo una lista como esta:¿Cómo agrego los elementos de dos listas en una lista?

list1 = [good, bad, tall, big] 

list2 = [boy, girl, guy, man] 

y quiero hacer una lista como esta:

list3 = [goodboy, badgirl, tallguy, bigman] 

Probé algo como esto:

list3=[] 
list3 = list1 + list2 

pero esto solo contendría el valor de list1

, así que utiliza for:

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

pero daría lugar a demasiadas listas (en este caso, 4 * 4 = 16 de ellos)

¿Qué debo hacer? ¡Cualquier ayuda sería realmente genial!

Respuesta

21

Puede utilizar listas por comprensión con zip:

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

zip produce una lista de tuplas mediante la combinación de elementos de iterables que le des. Por lo tanto, en su caso, devolverá pares de elementos de list1 y list2, hasta lo que primero se agote.

+0

gracias! ¡realmente ayudó! :) –

+0

+1 La mejor manera de hacerlo en python. – jamylak

+1

En retrospectiva, probablemente recomendaría algo similar a la solución 'map' de una de las otras respuestas:' map (operator.add, list1, list2) '. Sin embargo, usar funciones binarias + con 'map' es una característica menos conocida que las listas de comprensión. – Xion

1

Una solución que utiliza un bucle que intentas es de una manera, esta es más amigable para principiantes que la solución de Xions.

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

Esto también funcionará para una solución más corta. El uso del mapa() y lambda, prefiero esto una postal, pero eso es tarea de todos

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

¿Por qué usar enumerar si no está usando 'item'? – Lenna

+0

Sin motivo. Solo para obtener el índice, creo que también podrías usar un rango(), pero estoy acostumbrado a esto. –

+1

Puede tener 'list3.append (item + list2 [index])' dentro del ciclo para que se use 'item'. – Xion

0

para este o dos cualesquiera lista de mismo tamaño también se puede usar como esto:

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

usando postal

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

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

Cuestiones relacionadas