Suma de lista de listas; devuelve la lista de sums

Sea data = [[3,7,2],[1,4,5],[9,8,7]]

Digamos que quiero sumr los elementos para los índices de cada lista en la lista, como agregar números en una columna de matriz para obtener una lista única. Supongo que todas las listas de datos tienen la misma longitud.

  print foo(data) [[3,7,2], [1,4,5], [9,8,7]] _______ >>>[13,19,14] 

¿Cómo puedo iterar sobre la lista de listas sin obtener un error de índice fuera de rango? Tal vez lambda? ¡Gracias!

Podrías probar esto:

 In [9]: l = [[3,7,2],[1,4,5],[9,8,7]] In [10]: [sum(i) for i in zip(*l)] Out[10]: [13, 19, 14] 

Esto utiliza una combinación de zip y * para descomprimir la lista y luego zip los elementos según su índice. A continuación, utiliza una lista de comprensión para recorrer los grupos de índices similares, sumándolos y regresando a su posición “original”.

Esperemos que sea un poco más claro, esto es lo que sucede cuando iteras a través de zip(*l) :

 In [13]: for i in zip(*l): ....: print i ....: ....: (3, 1, 9) (7, 4, 8) (2, 5, 7) 

En el caso de listas de longitud desigual, puede usar itertools.izip_longest con un fillvalue de fillvalue de 0 ; esto básicamente rellena los índices que faltan con 0 , lo que le permite sumr todas las ‘columnas’:

 In [1]: import itertools In [2]: l = [[3,7,2],[1,4],[9,8,7,10]] In [3]: [sum(i) for i in itertools.izip_longest(*l, fillvalue=0)] Out[3]: [13, 19, 9, 10] 

En este caso, esto es lo que se vería iterando sobre izip_longest :

 In [4]: for i in itertools.izip_longest(*l, fillvalue=0): ...: print i ...: (3, 1, 9) (7, 4, 8) (2, 0, 7) (0, 0, 10) 

Para cualquier matriz (u otras operaciones numéricas ambiciosas) recomendaría buscar NumPy.

La muestra para resolver la sum de una matriz a lo largo del eje que se muestra en su pregunta sería:

 >>> from numpy import array >>> data = array([[3,7,2], ... [1,4,5], ... [9,8,7]]) >>> from numpy import sum >>> sum(data, 0) array([13, 19, 14]) 

Aquí está la documentación de numpy para su función de sum: http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html#numpy.sum

Especialmente el segundo argumento es interesante ya que permite especificar fácilmente lo que debe resumirse: todos los elementos o solo un eje específico de una matriz potencialmente n-dimensional (como).

Esto te dará la sum de cada sublista.

 data = [[3,7,2],[1,4],[9,8,7,10]] list(map(sum, data)) [12, 5, 34] 

Si desea sumr todos los elementos y obtener solo una sum, use esto

 data = [[3,7,2],[1,4],[9,8,7,10]] sum(sum(data, [])) 51 
 >>> data = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] >>> for column in enumerate(data[0]): ... count = sum([x[column[0]] for x in data]) ... print 'Column %s: %d' % (column[0], count) ... Column 0: 3 Column 1: 6 Column 2: 9 

Esto depende de su suposición de que todas las listas internas (o filas) son de la misma longitud, pero debe hacer lo que quiera:

 sum_list = [] ncols = len(data[0]) for col in range(ncols): sum_list.append(sum(row[col] for row in data)) sum_list Out[9]: [13, 19, 14] 
 def sum(L): res = list() for j in range(0,len(L[0])): tmp = 0 for i in range(0,len(L)): tmp = tmp + L[i][j] res.append(tmp) return res 
 numArr = [[12, 4], [1], [2, 3]] sumArr = 0 sumArr = sum(sum(row) for row in numArr) print(sumArr) the answere: 22 

lo que hice: cuando haces “for” como este por ejemplo: [row.append (1) for row in numArr] la lista cambiará a: [[12, 4, 1], [1, 1], [2 , 3, 1]] Utilicé la función sum () de python, la función toma la lista y la hago iteración y traigo la sum de todos los números de la lista. cuando hice sum (sum ()) obtuve la sum de todas las listas en la lista grande.