将两个列表的值的总和添加到新列表中

时间:2014-05-19 19:31:41

标签: python list sum

编辑:是否可以在没有任何进口的情况下完成?

这个问题在这里已经有了答案,但如果列表的大小不同,它没有提及该怎么办

v1 = [1,2,3,4]
v2 = [1,2,3,4,5]

我需要sum = [2,4,6,8,5]

只有当列表具有相同的大小或[]时,才能从我的代码中获得成功的结果,但如果大小不同,无论我放在哪里都没有成功

这就是我得到的

def addVectors(v1, v2):
    sum = []
    result = 0
    if len(v1) == 0 and len(v2) == 0:
        return sum
    elif len(v1) == len(v2) or len(v1) != len(v2):
        for i in range(len(v1)):
            result = v1[i] + v2[i]
            sum.append(result)

    return sum

2 个答案:

答案 0 :(得分:3)

使用填充值设置为0的itertools.izip_longest()

from itertools import izip_longest

summed = [a + b for a, b in izip_longest(v1, v2, fillvalue=0)]

izip_longest()文档为您提供pure-python,无需导入所需的版本,前提是您还以纯python形式使用itertools.repeat()itertools.chain()函数。

或者你可以这样做:

def addVectors(v1, v2):
    min_length = min(len(v1), len(v2))
    result = [a + b for a, b in zip(v1, v2)]
    return result + v1[min_length:] + v2[min_length:]

演示:

>>> from itertools import izip_longest
>>> v1 = [1,2,3,4]
>>> v2 = [1,2,3,4,5]
>>> [a + b for a, b in izip_longest(v1, v2, fillvalue=0)]
[2, 4, 6, 8, 5]
>>> def addVectors(v1, v2):
...     min_length = min(len(v1), len(v2))
...     result = [a + b for a, b in zip(v1, v2)]
...     return result + v1[min_length:] + v2[min_length:]
... 
>>> addVectors(v1, v2)
[2, 4, 6, 8, 5]

答案 1 :(得分:3)

您可以使用填充值为0的izip_longest

from itertools import izip_longest

v1 = [1,2,3,4]
v2 = [1,2,3,4,5]
res = [sum(items) for items in izip_longest(v1, v2, fillvalue=0)]
# [2, 4, 6, 8, 5]