【发布时间】:2016-02-13 06:38:19
【问题描述】:
我正在尝试以递归方式从集合中获取所有子集,这是我目前拥有的代码:
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)
【问题讨论】:
-
Niggle:这些是列表,而不是集合。
-
@dawg 数学意义上的集合。我将它们实现为列表。
-
在函数顶部输入
print aset。你会看到你的循环永远不会被执行。然后在底部,你有return prevSets.extend(newSets),它返回None
标签: python recursion subset nonetype