gpt4 book ai didi

python - 列表理解中python中的递归函数调用给出的结果与首先将调用结果分配给变量不同

转载 作者:行者123 更新时间:2023-11-28 21:27:38 25 4
gpt4 key购买 nike

为什么不这样:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com