python中集合的所有子集递归(非类型错误)

2024-09-25 18:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图递归地从一个集合中获取所有的子集,下面是我到目前为止的代码:

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实现,我得到了以下错误,我似乎无法理解为什么:

^{pr2}$

似乎None已经变成了{},但是我不知道为什么,有什么想法吗?在

编辑-正确的解决方案:

多亏了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)

Tags: 代码inforlenreturnifdefanother
1条回答
网友
1楼 · 发布于 2024-09-25 18:22:15

此处,prevSets设置为None

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

因为下面的行生成None

^{pr2}$

list.extend()就地修改列表并返回None。分开通话并返回:

prevSets.extend(newSets)
return prevSets

或者改为使用串联:

return prevSets + newSets

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

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

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

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

相关问题 更多 >