为什么不这样:
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/