我想使用列表推导来返回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
答案 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)