Można spróbować to:
In [9]: l = [[3,7,2],[1,4,5],[9,8,7]]
In [10]: [sum(i) for i in zip(*l)]
Out[10]: [13, 19, 14]
ten wykorzystuje kombinację zip
*
rozpakować i listy, a następnie zip elementy według ich indeksu. Następnie używasz rozumienia list do iteracji przez grupy podobnych indeksów, sumując je i powracając w swojej "oryginalnej" pozycji.
miejmy nadzieję uczynić go nieco bardziej jasne, o to co się dzieje, gdy iterację zip(*l)
:
In [13]: for i in zip(*l):
....: print i
....:
....:
(3, 1, 9)
(7, 4, 8)
(2, 5, 7)
W przypadku list, które są nierównej długości, można użyć itertools.izip_longest
z fillvalue
z 0
- to w zasadzie wypełnia brakujące indeksy z 0
, dzięki czemu można podsumować wszystkie kolumny „”:
In [1]: import itertools
In [2]: l = [[3,7,2],[1,4],[9,8,7,10]]
In [3]: [sum(i) for i in itertools.izip_longest(*l, fillvalue=0)]
Out[3]: [13, 19, 9, 10]
W tym przypadku, o to co Iterowanie nad izip_longest
wyglądałby następująco:
In [4]: for i in itertools.izip_longest(*l, fillvalue=0):
...: print i
...:
(3, 1, 9)
(7, 4, 8)
(2, 0, 7)
(0, 0, 10)
[Co próbowaliście?] (Http://whathaveyoutried.com/) –