web-dev-qa-db-fra.com

Comment puis-je résumer une colonne d'une liste?

J'ai un tableau Python, comme suit:

[[1,2,3],
 [1,2,3]]

Je peux ajouter la ligne en faisant sum(array[i]). Comment puis-je additionner une colonne en utilisant une double boucle for?

C'EST À DIRE. pour la première colonne, je pourrais obtenir 2, puis 4, puis 6.

13
MarJamRob

Utilisation d'une boucle for (dans une expression generator ):

data = [[1,2,3],
        [1,2,3]]

column = 1
print sum(row[column] for row in data)
20
martineau

Essaye ça:

a = [[1,2,3],
     [1,2,3]]

print [sum(x) for x in Zip(*a)]

Description de la fonction zip

6
Artsiom Rudzenka

Vous n'avez pas besoin d'une boucle, utilisez Zip() pour transposer la liste, puis prenez la colonne souhaitée:

sum(list(Zip(*data)[i]))

(Remarque dans 2.x, Zip() renvoie une liste, vous n'avez donc pas besoin de l'appel list()).

Edit: La solution la plus simple à ce problème, sans utiliser Zip(), serait probablement:

column_sum = 0
for row in data:
    column_sum += row[i]

Nous nous contentons de parcourir les lignes en prenant l'élément et en l'ajoutant à notre total.

Ceci est toutefois moins efficace et plutôt inutile étant donné que nous avons des fonctions intégrées pour le faire pour nous. En général, utilisez Zip().

5
Gareth Latty
[sum(row[i] for row in array) for i in range(len(array[0]))]

Ça devrait le faire. len(array[0]) est le nombre de colonnes, donc i effectue une itération parmi celles-ci. L'expression du générateur row[i] for row in array parcourt toutes les lignes et sélectionne une seule colonne, pour chaque numéro de colonne.

4
Mark Ransom

Je pense que le moyen le plus simple est le suivant:

sumcolumn=data.sum(axis=0)

print (sumcolumn)
2
icehand

Vous pouvez être intéressé par numpy , qui a des fonctionnalités de tableau plus avancées ..____ L'une d'entre elles consiste à additionner facilement une colonne:

from numpy import array

a = array([[1,2,3],
 [1,2,3]])

column_idx = 1
a[:, column_idx].sum() # ":" here refers to the whole array, no filtering.
0
monkut

Vous pouvez utiliser numpy:

import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.sum(0)
0
Arunim sharma

vous pouvez utiliser Zip():

In [16]: lis=[[1,2,3],
   ....:  [1,2,3]]

In [17]: map(sum,Zip(*lis))
Out[17]: [2, 4, 6]

ou avec un simple pour les boucles:

In [25]: for i in xrange(len(lis[0])):
    summ=0
    for x in lis:
        summ+=x[i]
    print summ
   ....:     
2
4
6
0
Ashwini Chaudhary