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

标签 python

为什么不这样:

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/

相关文章:

python - 使用 pandas 进行实时数据处理

python - 使用 sklearn RandomForestClassifier 进行分类

python - 在字典中查找 X 和 Y 的最大和最小坐标

python - 有没有办法在Scrapy的Crawlspider中获取 anchor 标记内的文本?

python - Ubuntu 18.04 上的 "E: Unable to locate package python-pip"

python - 如何使用 pandas 中的 apply 函数实现此 iterrow 情况?

python - Numpy 切片慢?

python irc bot,无法加入服务器

python - 命令提示符中的彩色文本在 "cls"之后但不在 "cls"之前

python - self.writer.writerow([s.encode ('utf-8') for s in row])