递归求和python中的elementbyelement

2024-10-01 09:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以递归地将两个列表元素逐个相加,然后返回新列表?在

def sumListElements(listOne, listTwo):
    list = []
    i = 0
    while i < len(listOne):
        list.append(listOne[i] + listTwo[i])
        i += 1
    return list

所以

^{pr2}$

结果

R = [4, 6, 8]

Tags: 元素列表lenreturndeflistappendwhile
3条回答

函数获取n个列表,并将第i个索引中的每个元素与其他元素一起添加:

from itertools import izip_longest

def sum_elements(*lists):
    return map(sum, izip_longest(*lists, fillvalue=0))

显示了您的数据:

^{2}$

长度不均匀的列表仍然有很好的效果:

>>> 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]

这是一个递归实现

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]

或者

^{2}$

在此处使用zip()和{}:

R = map(sum, zip(a, b))

演示:

^{2}$

为了与Python 3兼容,请将map()替换为列表理解:

[sum(z) for z in zip(a, b)]

相关问题 更多 >