あなたはこれを試すことができます:
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]
zip
これは、との組み合わせを*
使用してリストを解凍し、インデックスに従ってアイテムを圧縮します。次に、リスト内包表記を使用して、類似したインデックスのグループを反復処理し、それらを合計して「元の」位置に戻します。
うまくいけば、もう少し明確にするために、これを繰り返したときに何が起こるかを示しますzip(*l)
。
In [13]: for i in zip(*l):
....: print i
....:
....:
(3, 1, 9)
(7, 4, 8)
(2, 5, 7)
長さが等しくないリストの場合は、-で使用できます。itertools.izip_longest
これfillvalue
は0
基本的に欠落しているインデックスを0
で埋め、すべての「列」を合計できるようにします。
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]
この場合、反復処理はizip_longest
次のようになります。
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)