2012-10-22 12 views
11

長さが異なる場合でも2つ以上のリストを合計する最良の方法は何ですか?長さの異なる合計リスト

私が持っている例えば

lists = [[1, 2], [0, 3, 4], [5]] 

と結果は次のようになります。

result = [6, 5, 4] 
+0

'最も無作法な方法に対する挑戦はまだ開いています。 ' - ' izip_longest'については何がそんなに不快ですか? –

+1

何もない、それは単なる正解ではなく、オープンな質問です。この問題は、問題を解決する新しい方法を学ぶために、その課題を達成するための複数の方法を収集することを目的としていました。 –

+0

これは、stackoverflowに適した質問の種類ではありません。あなたはおそらく "建設的ではない"とフラグを立てるでしょう。 –

答えて

18

あなたはitertools.izip_longest()を使用して、Pythonのため0

In [6]: [sum(x) for x in itertools.izip_longest(*lists, fillvalue=0)] 
Out[6]: [6, 5, 4] 

に等しいfillvalueを使用することができます< 2.6:

In [27]: ml = max(map(len, lists)) 

In [28]: ml  #length of the longest list in lists 
Out[28]: 3 

In [29]: [sum(x) for x in zip(*map(lambda x:x+[0]*ml if len(x)<ml else x, lists))] 
Out[29]: [6, 5, 4] 
+1

(ユーザーがPython <2.6を使用していない場合) –

0

私が思いついた最高のは、次のとおりです。

result = [sum(filter(None, i)) for i in map(None, *lists)] 

それは悪くないのですが、私はNoneTypesを追加し、合計するために、それらをフィルタリングする必要があります。

関連する問題