在列表理解中使用第二个的枚举值

Using enumurate value of second for in list comprehension

我想使用列表推导式 returns 目录列表中所有文件的文件名。我写了以下列表理解,但失败了,因为 d 在第一次迭代的 os.listdir(d) 时未定义。我怎样才能重构这个列表理解使其有效?

[f for f in os.listdir(d) for d in dirs if os.path.isfile(os.path.join(d, f))]
NameError: global name 'd' is not defined

你的逻辑正好相反

[f for d in dirs for f in os.listdir(d)  if os.path.isfile(os.path.join(d, f))]

与以下相同:

fles = []
for d in dirs:
    for f in os.listdir(d):
        if os.path.isfile(os.path.join(d, f)):
            fles.append(f)

您需要按照嵌套顺序对 for 循环进行排序;你让他们交换了。将for d in dirs部分移到前面:

[f for d in dirs for f in os.listdir(d) if os.path.isfile(os.path.join(d, f))]

如果有帮助,请先将循环写成常规 for 语句:

for d in dirs:
    for f in os.listdir(d):
        if os.path.isfile(os.path.join(d, f)):
            # append f

只需加入行并删除 : 冒号即可创建列表理解顺序。