列表理解中的三元运算符未按预期工作

ternary operator in list comprehension not working as expected

编辑:事实证明这个问题与列表理解完全无关。问题是由于没有将完整路径传递而仅将文件名传递到 os.path.isfile() 中,这使得它始终评估为 False。

为什么这个列表理解前面的 if/else 没有按预期工作?下面的语句生成了一个全为 0 的列表(其他情况)。

[1 if os.path.isfile(file) else 0 for file in os.listdir(path)]

如果文件是文件,预期输出为 1,如果文件是目录,预期输出为 0 我已经在另一条线上独立测试了 1 if os.path.isfile(file) else 0 并且它按预期工作(有 1 和 0 的混合)。我的列表理解语句找不到任何语法问题。

更有趣的是,如果我用其他东西替换条件,例如 1 if file else 0,行为就会翻转。现在每个项目都变成 1,即使有些项目预计为 0(同样,我使用完全相同的条件表达式独立验证了它们)

我已经尝试将 bool() 添加到我的条件中,但它没有任何作用。我也试过 str(file) 也没有区别。

尝试将文件的绝对路径传递给isfile函数:

[1 if os.path.isfile(os.path.join(path, file)) else 0 for file in os.listdir(path)]

你也可以不用 if:

[int(os.path.isfile(os.path.join(path, file))) for file in os.listdir(path)]

不用三元运算符也可以做到:

[int(os.path.isfile(os.path.join(path, file))) for file in os.listdir(path)]

或取决于您打算如何处理结果列表:

[os.path.isfile(os.path.join(path, file)) for file in os.listdir(path)]

我总是喜欢后者