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
1
Mpizos Dimitris 7 mars 2016 à 14:45

4 réponses

Meilleure réponse

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.

3
Kasramvd 7 mars 2016 à 12:24

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
2
Netwave 7 mars 2016 à 11:52

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
3
Selcuk 7 mars 2016 à 11:47

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
1
L3viathan 7 mars 2016 à 12:17