在列表理解中使用第二个的枚举值
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
只需加入行并删除 :
冒号即可创建列表理解顺序。
我想使用列表推导式 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
只需加入行并删除 :
冒号即可创建列表理解顺序。