为什么不:

def subsets(x):
    if not x:
        return [[]]
    else:
        return [x + y for x in [[], [x[0]]] for y in subsets(x[1:])]

print subsets(['a', 'b'])

产生与此相同的输出:
def subsets(x):
    if not x:
        return [[]]
    else:
        z = subsets(x[1:])
        return [x + y for x in [[], [x[0]]] for y in z]

print subsets(['a', 'b'])

最佳答案

问题是,您使用的名称x有两种不同的用途。当您在列表理解中将x作为变量引入时,它会隐藏函数中定义的x。因此,你列表理解中的最后一个x并不是指你所希望的x
将其中一个x重命名为其他内容可以解决问题:

def subsets(original_x):
    if not original_x:
        return [[]]
    else:
        return [x + y for x in [[], [original_x[0]]]
                      for y in subsets(original_x[1:])]

我还建议您尝试为变量找到更多描述性名称。这将减少意外重用名称的可能性。

关于python - 列表理解中python中的递归函数调用与将调用结果首先分配给变量相比,得到的结果不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10465232/

10-12 22:26