Python 当递归发生时,为什么这个列表变为非类型?
所以我试着编写这段代码,查找列表中是否有数字的子集,这些数字的总和就是一个也被传递进来的结果。然而,每当我运行代码时,由于某种原因,我的currentlist变量就变成了NoneType。这是我得到的错误:Python 当递归发生时,为什么这个列表变为非类型?,python,function,recursion,nonetype,Python,Function,Recursion,Nonetype,所以我试着编写这段代码,查找列表中是否有数字的子集,这些数字的总和就是一个也被传递进来的结果。然而,每当我运行代码时,由于某种原因,我的currentlist变量就变成了NoneType。这是我得到的错误: AttributeError: 'NoneType' object has no attribute 'append' 这是我的代码: def resultinSubset(t,s): currentlist=[] currentsum=0 def recresu
AttributeError: 'NoneType' object has no attribute 'append'
这是我的代码:
def resultinSubset(t,s):
currentlist=[]
currentsum=0
def recresultinSubset(t,s,i,currentsum,currentlist):
if currentsum == t:
return True
if i == (len(s)):
return False
newlist=currentlist.append(s[i])
newsum=int(currentsum)+int(s[i])
including=recresultinSubset(t,s,i+1,newsum,newlist)
notincl=recresultinSubset(t,s,i+1,currentsum,currentlist)
return including + notincl
return recresultinSubset(t,s,0,currentsum,currentlist)
print(currentlist)
print(resultinSubset(6, [1,2,3]))
这将设置newlist=None
,因为append()
没有返回值。如果您想要添加额外值的新列表,请使用:
newlist = currentlist + [s[i]]
请注意,每次递归调用都创建一个新列表是非常低效的。修改算法以适当地操作单个列表是值得的。请始终尝试提供一个列表。如果收到错误,请发布整个错误消息,包括堆栈跟踪。下一行:
newlist=currentlist.append(s[i])
将None
分配给newlist
,因为.append
返回None
。注意,.append
不会创建新列表。这与递归无关。我刚刚弄明白了,但谢谢你!
newlist = currentlist + [s[i]]