总和列表具有不同的长度

时间:2012-10-22 12:22:34

标签: python algorithm list sum

即使两个或多个列表的长度不同,最好的方法是什么?

例如我有:

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

,结果应为:

result = [6, 5, 4]

4 个答案:

答案 0 :(得分:18)

您可以使用itertools.izip_longest(),并使用等于fillvalue的{​​{1}}

0

for Python< 2.6:

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

答案 1 :(得分: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]))

答案 2 :(得分:0)

我想出的最好成绩如下:

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

它不是那么糟糕,但我必须添加NoneTypes然后过滤它们才能总结。

答案 3 :(得分:0)

这对于包含一千零一点元素的列表很有效。检查 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)