在列表理解中使用第二个enumurate值

时间:2015-06-08 09:51:29

标签: python list-comprehension

我想使用列表推导来返回dirs列表中所有文件的文件名。我写了下面的列表理解,因为在第一次迭代时os.listdir(d)没有定义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

2 个答案:

答案 0 :(得分:2)

您需要按照您嵌套的顺序订购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

并加入行并删除:冒号以创建列表推导顺序。

答案 1 :(得分:1)

你有反向逻辑

[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)