Python 等式语句 a==b in [c,d,e]

KIA*_*aze 5 python python-3.x

我刚刚遇到一些带有以下语句的 python 代码:

if a==b in [c,d,e]:
    ...
Run Code Online (Sandbox Code Playgroud)

事实证明:

>>> 9==9 in [1,2,3]
False
>>> 9==9 in [1,2,3,9]
True
>>> (9==9) in [1,2,3,9]
True
>>> 9==(9 in [1,2,3,9])
False
>>> True in [1,2,3,9]
True
>>> True in []
False
>>> False in []
False
>>> False in [1,2,3]
False
Run Code Online (Sandbox Code Playgroud)

我是否正确地假设 等于a==b in [c,d,e],因此只有当是 True/False 值列表(a==b) in [c,d,e]时才真正有意义?[c,d,e]

b在我看到的代码始终在列表中的情况下[c,d,e]。那么它是否等同于简单地使用a==b

mkr*_*er1 3

我假设这a==b in [c,d,e]相当于(a==b) in [c,d,e]

不。由于 和==都是in比较运算符因此表达式

a == b in [c, d, e]
Run Code Online (Sandbox Code Playgroud)

相当于

(a == b) and (b in [c, d, e])
Run Code Online (Sandbox Code Playgroud)

因为所有比较运算符具有相同的优先级但可以链接。

因此只有当 是/值[c,d,e]的列表时才真正有意义?TrueFalse

检查整数列表中是否包含布尔值也很有意义。由于True被认为等于1,并且False被认为等于0(请参阅标准类型层次结构),因此该检查的结果甚至可以是True