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.
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)
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()
.
[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.
Je pense que le moyen le plus simple est le suivant:
sumcolumn=data.sum(axis=0)
print (sumcolumn)
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.
Vous pouvez utiliser numpy:
import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.sum(0)
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