编辑:是否可以在没有任何进口的情况下完成?
这个问题在这里已经有了答案,但如果列表的大小不同,它没有提及该怎么办
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
答案 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]