【问题标题】:Recursion function (subset) returns empty (python)递归函数(子集)返回空(python)
【发布时间】:2018-10-12 11:26:25
【问题描述】:

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

有人知道为什么吗?欣赏它!

【问题讨论】:

标签: python recursion


【解决方案1】:

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

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

res.append(subset[:])

你会得到你预期的结果:

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

【讨论】:

  • 非常感谢,@jedwards!
猜你喜欢
  • 2020-10-10
  • 2016-06-30
  • 1970-01-01
  • 2021-08-14
  • 2015-11-09
  • 2014-07-13
  • 1970-01-01
相关资源
最近更新 更多