2012-07-01 11 views
12

Tengo algunas listas de números:¿Cómo puedo agregar los elementos correspondientes de varias listas de números?

[1, 2, 3, 4, 5] 
[2, 3, 4, 5, 6] 
[3, 4, 5, 6, 7] 

¿Cómo puedo añadir elementos de estas listas, asumiendo que todas las listas que estoy usando son de la misma longitud?

Este es el tipo de salida que me gustaría obtener al hacer esto en las listas anteriores.

[6, 9, 12, 15, 18] 

Sé que necesitaré un bucle de algún tipo, pero ¿cómo puedo hacerlo elegantemente?

Respuesta

29

probar este código de estilo funcional:

>>> map(sum, zip(*lists)) 
[6, 9, 12, 15, 18] 

La función zip coincide elementos con el mismo índice.

>>> zip(*lists) 
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)] 

Entonces sum se aplica a cada tupla mediante el uso de map.

ver su funcionamiento en línea: ideone


Tenga en cuenta que en Python 3.x, map ya no devuelve una lista. Si necesita la lista, por favor consulte la siguiente pregunta: ¿

(Sólo puede llamar list).

+0

mapa devuelve un objeto de mapa en python 3.x –

+0

@AshwiniChaudhary: asumo Python 2.x a menos que el OP especifique lo contrario, pero he agregado una nota sobre Python 3.x. –

+0

Debo usar zip – young001

6
>>> lis=[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]] 

>>> [sum(x) for x in zip(*lis)] 
[6, 9, 12, 15, 18] 
1

¿Qué tal:

a = [1,2,3,4,5] 
b = [2,3,4,5,6] 
c = [3,4,5,6,7] 

s = map(sum, zip(a,b,c)) 
4

Suponiendo:

a = [1,2,3,4,5] 
b = [2,3,4,5,6] 
c = [3,4,5,6,7] 

a hacer esto:

[sum(n) for n in zip(*[a, b, c])] 
5

Usando numpy:

>>> seq = np.array([ 
... [1,2,3,4,5], 
... [2,3,4,5,6], 
... [3,4,5,6,7]]) 
>>> np.sum(seq,axis=0) 
array([ 6, 9, 12, 15, 18]) 
+1

A menos que el OP quiera continuar usando numpy, no estoy seguro de que la mejor forma de hacerlo sea convertirlo a numpy. Por supuesto, si se deben realizar más cálculos, numpy sería la manera de ir – Dhara

+2

numpy es un buen módulo, debería mirarlo detenidamente. – young001

Cuestiones relacionadas