繁体   English   中英

列表理解中python中的递归函数调用与首先将调用结果分配给变量相比,得到的结果不同

[英]Recursive function calls in python in list comprehension gives different result than assigning the result of the call to a variable first

为什么不这样:

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

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:])]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM