我对Python有点陌生,正在进行编程练习。我编写了以下递归方法,在Python中基于一个输入列表生成幂集。它应该返回一个生成器,该生成器根据传递给s
的给定列表生成幂集。幂集中的每个元素都应该是一个集合。
def gps(s, res=set()):
if s:
elem = s.pop()
gps(s, res)
res.add(elem)
gps(s, res)
else:
yield res
但是,当我使用list(gps([1,2]))
调用它时,却给了我一个[]
。正确的结果应该是类似于[set(), {1}, {2}, {1, 2}]
。
我删除了yield
语句,添加了两行代码,并通过print
语句进行调试,得到了这段代码,它打印出了正确的结果,似乎更接近正确了:
def gps(s, res=set()):
if s:
elem = s.pop()
gps(s, res)
res.add(elem)
gps(s, res)
s.append(elem)
res.remove(elem)
else:
print(res)
读完另一个Stack Overflow答案后,我修改了我的函数来使用yield from
,但以下修改后的代码仍然给出了错误的结果:
def gps(s, res=set()):
if s:
elem = s.pop()
yield from gps(s, res)
res.add(elem)
yield from gps(s, res)
s.append(elem)
res.remove(elem)
else:
yield res
我在处理这个问题时哪里做错了?希望能得到一些提示和澄清。