sum两个以递归方式在python中逐个元素列出

时间:2014-04-06 11:17:28

标签: python arrays list recursion

是否可以逐个元素递归地对两个列表求和,然后返回新列表?

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]

3 个答案:

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