Comment additionner toutes les valeurs d'une colonne dans un tableau python? Idéalement, je veux le faire sans importer de bibliothèques supplémentaires.
input_val = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
output_val = [3, 6, 9, 12, 15]
Je sais que cela peut être fait dans une boucle imbriquée, en me demandant s'il y avait une meilleure façon (comme une liste de compréhension)
Zip
et sum
peuvent le faire:
Code:
[sum(x) for x in Zip(*input_val)]
Zip
prend le contenu de la liste d'entrée et le transpose pour que chaque élément des listes contenues soit produit en même temps. Ceci permet à la sum
de voir les premiers éléments de chaque liste contenue, puis la prochaine itération obtiendra le deuxième élément de chaque liste, etc ...
Code de test:
input_val = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
print([sum(x) for x in Zip(*input_val)])
Résultats:
[3, 6, 9, 12, 15]
Si vous décidez d'utiliser une bibliothèque, numpy le fait facilement:
np.sum (input_val, axis = 0)
Vous pouvez également utiliser sum
avec Zip
dans la map
fonction:
# In Python 3.x
>>> list(map(sum, Zip(*input_val)))
[3, 6, 9, 12, 15]
# explicitly type-cast it to list as map returns generator expression
# In Python 2.x, explicit type-casting to list is not needed as `map` returns list
>>> map(sum, Zip(*input_val))
[3, 6, 9, 12, 15]
Cela devrait fonctionner:
[sum(i) for i in Zip(*input_val)]
Essaye ça:
input_val = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
output_val = [sum([i[b] for i in input_val]) for b in range(len(input_val[0]))]
print output_val
Je pense que c'est la façon la plus pythonique de le faire
map(sum, [x for x in Zip(*input_val)])
Comprendre une liste à l'aide de listes: pour chaque colonne (longueur d'une ligne), dressez une liste de toutes les entrées de cette colonne et additionnez cette liste.
output_val = [sum([input_val[i][j] for i in range(len(input_val))]) \
for j in range(len(input_val[0]))]
Essayez ce code. Cela fera que output_val
finira par [3, 6, 9, 12, 15]
étant donné votre input_val
:
input_val = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
vals_length = len(input_val[0])
output_val = [0] * vals_length # init empty output array with 0's
for i in range(vals_length): # iterate for each index in the inputs
for vals in input_val:
output_val[i] += vals[i] # add to the same index
print(output_val) # [3, 6, 9, 12, 15]
Je suppose que vous pouvez utiliser:
import numpy as np
new_list = sum(map(np.array, input_val))
En utilisant Numpy, vous pouvez facilement résoudre ce problème en une seule ligne:
1: Entrée
input_val = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
2: Numpy fait le calcul pour vous
np.sum(input_val,axis=0)
3: Enfin les résultats
array([ 3, 6, 9, 12, 15])
output_val=input_val.sum(axis=0)
cela rendrait le code encore plus simple, je suppose