12

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

たとえば、私は持っています:

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

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

result = [6, 5, 4]
4

4 に答える 4

19

itertools.izip_longest()を使用でき、にfillvalue等しいを使用できます0

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

Python <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]
于 2012-10-22T12:27:07.563 に答える
1
#You can do the same without using predefined header files.
def sumlists(a,b,c):
    sumlist = []
    while(len(a)!=len(b) or len(a)!=len(c)):
        if len(a)>len(b):
            b.append(0)
        if len(a)>len(c):
            c.append(0)
        elif len(b)>len(a):
            a.append(0)
        if len(b)>len(c):
             c.append(0)
        elif len(c)>len(a):
            a.append(0)
        if len(c)>len(b):
             b.append(0)
    for i,j,k in zip(a,b,c):
         sumlist.append(i+j+k)
    return sumlist
 print(sumlists([1,2],[0,3,4],[5]))
于 2019-07-19T09:22:17.890 に答える
0

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

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

それほど悪くはありませんが、NoneTypesを追加してから、それらをフィルタリングして合計する必要があります。

于 2015-05-04T17:16:29.397 に答える
0

これは、1000とビットの要素を持つリストでうまく機能しました。追加するifステートメントの天気をチェックするのに何年もかかりましたが、これはかなり速く実行されました。最長のリストを識別して返す関数「longestlist」がありましたが、その出力を使用すると非常に簡単に記述できます...

def listfiller(a,b,c,d)
  longest = longestlist(a,b,c,d)
  for i in range(len(longest)-len(a)):
    a.append(0)
  for i in range(len(longest)-len(b)):
    b.append(0)
    print(b)
  for i in range(len(longest)-len(c)):
    c.append(0)
  for i in range(len(longest)-len(d)):
    d.append(0)
  return(a,b,c,d)
于 2021-04-19T08:50:06.470 に答える