Disons que j'ai la liste suivante:
a = [[1,2,3],[4,5,6],[7,8,9]]
Existe-t-il un moyen de résumer tous les éléments secondes sans utiliser de boucle ? Tel que:
the_sum = 0
for num in a:
the_sum += num[1]
>>> 15
4 réponses
Sans utiliser de boucle, vous pouvez utiliser la fonction zip()
:
>>> sum(list(zip(*a))[1])
15
Remarque : Si vous utilisez python 2.X puisque zip
renvoie une liste au lieu d'un itérateur, vous n'avez pas besoin d'utiliser list()
sur la fonction zip
.
Utilisez réduire pour ne pas créer d'objets intermédiaires en mémoire:
>>>from functools import reduce
>>>reduce(lambda x, y: x + y[1], a, 0)
>>>15
Compréhensions:
a = [[1,2,3],[4,5,6],[7,8,9]]
print(sum(sublist[1] for sublist in a))
Aura pour résultat
15
Toutes les autres réponses sont tout à fait correctes, mais voici une quatrième façon:
>>> import operator
>>> sum(map(operator.itemgetter(2), a))
15
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.