2017-10-22 7 views
3

私は整数のこれら二つのリストを持っています。 だから、私が取得する必要があります。さらに、「****」太字の部分については、私は正しいだかどうかわからない再帰のpython

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):]** 

と:ここ

[5,10,12,8] 

は私の関数であり、私はプログラムを実行したとき、私は を返しました "返信A [0] + B [0] +合計(A [1:b]、B [1:])+ A [(b + 1):]

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

答えて

3

あなたの再帰的なケースは正しくありません。 gリストの合計。つまり、A[0] + B[0]を1つの要素リストとして追加する必要があります。基本的に、これはあなたがやっていることです:

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

が、まだこの問題を抱えている:TypeError例外:+のためのサポートされていないオペランドのタイプ(複数可): 'int'と 'list'。 –

+0

@ J.Doneファイルを保存したとは思わない。 –

+0

OMG!どうもありがとうございます !! –

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

デフ和(L1、L2、結果=なし、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] 
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]