【问题标题】:Why is this list becoming NoneType when a recursion happens? [duplicate]当递归发生时,为什么这个列表会变成 NoneType? [复制]
【发布时间】:2021-04-03 06:25:39
【问题描述】:

所以我试图制作这个代码来查找列表中是否有一个数字子集,该子集总结为一个也被传入的结果。然而,每当我运行我的代码时,由于某种原因,我的 currentlist 变量变为 NoneType。这是我得到的错误:

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

【问题讨论】:

  • 始终尝试提供minimal reproducible example。如果您遇到错误,请发布包括堆栈跟踪在内的整个错误消息。以下行:newlist=currentlist.append(s[i])None 分配给newlist,因为.append 返回None。请注意,.append 不会创建新列表。这与递归无关。

标签: python function recursion nonetype


【解决方案1】:
newlist=currentlist.append(s[i])

这会设置newlist = None,因为append() 没有返回值。如果您想要一个带有额外值的新列表,请使用:

newlist = currentlist + [s[i]]

请注意,每次递归调用都创建一个新列表是非常低效的。修改算法以操作单个列表是值得的。

【讨论】:

  • 我刚刚弄明白了,谢谢!
猜你喜欢
  • 2012-08-02
  • 2020-08-03
  • 2021-01-16
  • 2014-03-14
  • 2016-09-24
  • 2021-12-27
  • 2019-12-28
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多