gpt4 book ai didi

python - python中集合的所有子集递归(Nonetype错误)

转载 作者:行者123 更新时间:2023-11-28 22:40:26 27 4
gpt4 key购买 nike

我正在尝试递归地从一个集合中获取所有子集,这是我目前拥有的代码:

aset = [1,2,10,4,5,99]

def subSets(aset):
if len(aset) == 0:
return []
prevSets = subSets(aset[:len(aset)-1])
newSets =[]
print prevSets
for s in prevSets:
newSets.append(s.append(aset[-1]))
return prevSets.extend(newSets)

print subSets(aset)

通过这个 python 实现,我收到以下错误,我似乎无法理解为什么:

  File "9_4.py", line 9, in subSets
for s in prevSets:
TypeError: 'NoneType' object is not iterable

None 似乎进入了 prevSet,但我不知道为什么,有什么想法吗?

编辑 - 正确的解决方案:

感谢 Martijn Pieters,我弄清楚了到底出了什么问题,最终我试图实现以下目标:

def subSets(aset):
if len(aset) == 0:
return [[]]
prevSets = subSets(aset[:-1])
newSets =[]
for s in prevSets:
another = s + [aset[-1]]
newSets.append(another)
return prevSets + newSets

print subSets(aset)

最佳答案

prevSets 在此处设置为 None:

prevSets = subSets(aset[:len(aset)-1])

因为下行生成None:

return prevSets.extend(newSets)

list.extend() 改变列表就地 并返回None。分离调用和返回:

prevSets.extend(newSets)
return prevSets

或者改用连接:

return prevSets + newSets

请注意,您在其他地方犯了类似的错误:

for s in prevSets:
newSets.append(s.append(aset[-1]))

list.append() 也返回 None,因此您实质上是将 None 添加到 newSets .我不确定您想在那里添加什么;如果您想在将 aset[-1] 添加到 s 之后将 s 添加到 newSets,请单独执行此操作行:

for s in prevSets:
s.append(aset[-1])
newSets.append(s)

关于python - python中集合的所有子集递归(Nonetype错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662959/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com