2017-04-11 143 views
0

我正在寻找使用递归和for-loops的组合来使用函数summer(alist)在可能为空的嵌套列表中添加所有int。到目前为止我的代码是:递归添加嵌套列表

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

我的问题是,例如列表:

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

我的结果是这样的:

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

我怎样才能得到我的函数递归在整个列表,而不只是第一个双重嵌套列表?

+1

问题是你的'return'语句结束for循环 – Chris

+0

啊,陷阱。我会尝试删除它。 – Jam

+1

刚刚发布了一个可能的修复... – Chris

回答

3

的问题是该行:

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

因为回归将for循环。你可以通过这样做来解决这个问题:

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

@Jam你应该考虑使用'isinstance(item,list)'而不是'type(item)== list'。它比较灵活(例如'isinstance(item,(list,tuple,set))',也适用于子类)和pythonic方式。如果你想检查确切的类型,使用'is':'type(item)is list' – schwobaseggl

+0

@schwobaseggl好点..你认为我应该编辑答案,包括这个? – Chris