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