gpt4 book ai didi

python - 递归函数(子集)返回空(python)

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:03 25 4
gpt4 key购买 nike

我编写了一个递归函数来从整数列表中获取所有子集。例如,给定一个列表 [1, 2, 3],返回将是 [[],[1],[2],[3],[1, 2], [1, 3],[2, 3],[1, 2, 3]].

这是我的代码:

def subsets(nums):

def helper(subset, i):

if i == len(nums):
print('return = ', subset)
res.append(subset)

else:
helper(subset, i+1)
subset.append(nums[i])
helper(subset, i+1)
subset.remove(nums[i])

res = []
helper([], 0)
return res

我在每次递归中打印出 subset,它们是正确的。然而,最终返回的 res 总是空的。

return =  []
return = [3]
return = [2]
return = [2, 3]
return = [1]
return = [1, 3]
return = [1, 2]
return = [1, 2, 3]
res = [[], [], [], [], [], [], [], []]

谁知道为什么?欣赏它!

最佳答案

非常接近!问题是 subset 被附加到 res,但后来被修改了。您想要的是子集当时的“卡住”版本,而不是对它最终将成为什么的“引用”。

因此,不要使用 res.append(subset),而是考虑附加列表的副本,例如:

res.append(subset[:])

你会得到你预期的结果:

[[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]

关于python - 递归函数(子集)返回空(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771519/

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