是否可以逐个元素递归地对两个列表求和,然后返回新列表?
def sumListElements(listOne, listTwo):
list = []
i = 0
while i < len(listOne):
list.append(listOne[i] + listTwo[i])
i += 1
return list
所以,
a = [1, 2, 3]
b = [3, 4, 5]
结果
R = [4, 6, 8]
答案 0 :(得分:2)
这是一个递归实现
def recursive_sum(l1, l2, idx = 0):
if idx < min(len(l1), len(l2)):
return [l1[idx] + l2[idx]] + recursive_sum(l1, l2, idx + 1)
else:
return []
print recursive_sum([1, 2, 3], [4, 5, 6])
# [5, 7, 9]
或者
def recursive_sum(l1, l2, result = None, idx = 0):
if result is None:
result = []
if idx < min(len(l1), len(l2)):
result.append(l1[idx] + l2[idx])
return recursive_sum(l1, l2, result, idx + 1)
else:
return result
答案 1 :(得分:1)
在此使用zip()
和map()
:
R = map(sum, zip(a, b))
演示:
>>> a = [1, 2, 3]
>>> b = [3, 4, 5]
>>> map(sum, zip(a, b))
[4, 6, 8]
对于Python 3兼容性,请将map()
替换为列表解析:
[sum(z) for z in zip(a, b)]
答案 2 :(得分:1)
获取n个列表的函数,并将第i个索引中的每个元素与其他元素一起添加:
from itertools import izip_longest
def sum_elements(*lists):
return map(sum, izip_longest(*lists, fillvalue=0))
显示您的数据:
>>> sum_elements([1, 2, 3], [3, 4, 5])
[4, 6, 8]
长度不均匀的列表仍然有一个很好的结果:
>>> sum_elements([1, 2, 3], [3, 4, 5, 6])
[4, 6, 8, 6]
它可以采用任意数量的列表:
>>> sum_elements([1, 2, 3], [3, 4, 5, 6], [8,9])
[12, 15, 8, 6]