首页 > 解决方案 > 递归函数(子集)返回空(python)

问题描述

我编写了一个递归函数来从整数列表中获取所有子集。例如,给定一个 list [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 = [[], [], [], [], [], [], [], []]

有谁知道为什么?欣赏它!

标签: pythonrecursion

解决方案


很接近了!问题是subset被附加到res,但后来被修改。您想要的subset 是 then的“冻结”版本,而不是最终将成为的“参考”。

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

res.append(subset[:])

你会得到你预期的结果:

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

推荐阅读