2017-04-11 21 views
0

再帰とfor-loopの組み合わせを使用して、可能であれば空の一連のネストされたリストにすべてのintを追加するには、関数summer(alist)を使用します。私のコードは、これまでのところです:ネストされたリストを再帰的に追加する

**def summer(alist):** 
total=0 
print alist 
for item in alist: 
    if type(item)==list: 
     print "The item is a list, containing: "+str(item) 
     return sum_nested_list(item) 
    elif type(item)==int: 
     print item 
     total = total + item 
print "The total is: "+str(total) 
return total 

私の問題は、例えば、リストのことです。

[[0,[0,1,1]],[0,1],1] 
The item is a list, containing: [0,[0,1,1]] 
[0,[0,1,1]] 
0 
The item is a list, containing [0,1,1] 
[0,1,1] 
0 
1 
1 
The total is: 2 
2 

どのように私は私の機能を介して再帰的に得ることができます:

list1=[[0,[0,1,1]],[0,1],1] 

私の結果はこれです全体リスト最初の二重ネストされたリストだけでなく、リスト?戻り値は、forループを終了します

if type(item)==list: 
    print "The item is a list, containing: "+str(item) 
    return sum_nested_list(item) 

ので:

+1

問題は、あなたの 'return'ステートメントがforループを終了することです。 – Chris

+0

Ah、gotcha。私は今それを削除しようとします。 – Jam

+1

は可能な修正を掲載しました... – Chris

答えて

3

問題はラインです。

if type(item)==list: 
    print "The item is a list, containing: "+str(item) 
    total += sum_nested_list(item) 
+3

@Jam 'type(item)== list'の代わりに' isinstance(item、list) 'を使うことを検討してください。 (isinstance(item、(list、tuple、set))やサブクラスでも機能します)やPythonのような柔軟性があります。正確なタイプをチェックしたい場合は 'is'を使います:' type(item)is list' – schwobaseggl

+0

@schwobaseggl良い点..これを含めるには答えを編集すべきだと思いますか? – Chris

関連する問題