递归添加两个整数列表--python

时间:2017-10-22 03:09:31

标签: python list

我有两个整数列表:

A=[1,5,3]
B=[4,5,9,8]

我想使用递归方法得到这两个的总和,并且额外的整数只是追加到结果中。 所以我应该得到:

[5,10,12,8]

以下是我的功能:

def sum(A,B):
    a = len(A)
    b = len(B)

    if a == 0 :
        return B
    elif b == 0 :
        return  A
    elif a >= b :

        return A[0] + B[0] + sum(A[1:b],B[1:])+ **list1[(b+1):]**
    else:
        return  A[0] +B[0] + sum(A[1:],B[1:a])+**list2[(a+1):]**

对于“****”粗体部分,我不确定我是否正确, 而且,当我运行程序时,我得到了 “返回A [0] + B [0] +总和(A [1:b],B [1:])+ A [(b + 1):]

  

TypeError:+:'int'和'list'“

不支持的操作数类型

4 个答案:

答案 0 :(得分:3)

您的递归案例不正确。您应该返回一个列表总和,这意味着您的A[0] + B[0]必须添加为单个元素列表。基本上,这就是你正在做的事情:

In [559]: 1 + [123]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-559-01aa05245fd1> in <module>()
----> 1 1 + [123]

TypeError: unsupported operand type(s) for +: 'int' and 'list'

这就是你应该做的事情:

In [560]: [1] + [123]
Out[560]: [1, 123]

这是递归案例的工作版本,稍微整理一下。

In [555]: def sum(A, B):
     ...:     if not len(A):
     ...:         return B
     ...:     elif not len(B):
     ...:         return A
     ...:
     ...:     return [A[0] + B[0]] + sum(A[1:], B[1:])
     ...: 

In [556]: sum(A, B)
Out[556]: [5, 10, 12, 8]

有趣的是,您可以将此功能缩短为一行。

In [557]: def sum(A, B):
     ...:     return A if not len(B) \
                       else (B if not len(A) \
                       else ([A[0] + B[0]] + sum(A[1:], B[1:])))
     ...: 

In [558]: sum(A, B)
Out[558]: [5, 10, 12, 8]

答案 1 :(得分:2)

def sum(l1, l2, result = None, id = 0):

    if result is None:
        result = []
    if id < min(len(l1), len(l2)):
        result.append(l1[id] + l2[id])
        return sum(l1, l2, result, id + 1)
    else:
        if len(l1)>len(l2):
          biggest=l1
        else:
          biggest=l2

        return result+biggest[id:]

输入

r=sum([1,5,3,2],[4,5,9,8,15])

输出

[5, 10, 12, 10, 15]

答案 2 :(得分:1)

执行此操作的非递归方式:

>>> import itertools
>>> a = [1,5,3]
>>> b = [4,5,9,8]
>>> [sum(i) for i in itertools.zip_longest(a,b,fillvalue=0)]
[5, 10, 12, 8]

答案 3 :(得分:0)

你可以试试这个:

def the_sum(a, b, c):
   if not a[1:] and b[1:]:
       c.append(b[0]+a[0])
       return the_sum(a, b[1:], c)
   if not b[1:]:
       c.append(b[0])
       return c
   if a[1:] and b[1:]:
       c.append(a[0]+b[0])
       return the_sum(a[1:], b[1:], c)

print(the_sum([1,5,3], [4,5,9,8], []))

输出:

[5, 10, 12, 8]