【发布时间】:2020-05-14 08:21:41
【问题描述】:
我正在尝试浏览目录中的所有文件并对具有特定文件名的文件执行某些操作。出于某种原因,当我使用列表理解时,if 语句不起作用,并且所有迭代似乎都进入了 if 语句:
for filename in os.listdir(somepath):
if (str(i_test) in filename for i_test in range(15,20)):
do something
如果我在 if 语句中明确写入数字,if 语句将按预期工作:
for filename in os.listdir(somepath):
if '15' in filename or ('16' in filename) or ('17' in filename) or ('18' in filename) or ('19' in filename):
do something
我找不到我在列表理解中搞砸的地方。
【问题讨论】:
-
if any(str(i_test) in filename for i_test in range(15,20)): -
您遇到的问题是您的理解返回了一个生成器对象,其布尔值始终为真。
-
你也可以试试:
if [i_test for i_test in range(15,20) if str(i_test) in filename]: -
@GiannisClipper 您只是在隐式玩弄非空列表具有真正的布尔值这一事实。最好像 r.ook 那样明确检查文件中是否存在。读起来更好。
标签: python python-3.x for-loop if-statement list-comprehension