2

为什么不这样:

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'])
4

1 回答 1

6

问题是您将名称x用于两种不同的事物。当您x在列表推导中作为变量引入时,它会隐藏x函数中定义的变量。结果,x您的列表理解中的 final 并不是 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:])]

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

于 2012-05-05T19:28:38.693 回答