python - `in` 运算符链接出现意外结果

标签 python operators

据我所知,Python 中的 in 运算符无法链接,或者至少我找不到任何相关信息,这是我的问题

这是代码

arr = [1, True, 'a', 2]
print('a' in arr in arr)  # prints False
print(('a' in arr) in arr)  # prints True

我不明白的是第一个打印,我知道在第二个打印中,第一个 in 返回 True,然后检查是否 True 位于 arr 中,但是第一个呢?它是否检查 'a' 是否在 in arr 中,然后检查 arr 是否在 in arr 中?

最佳答案

前提是假的; in 运算符可以被链接起来。请参阅Comparisons在文档中:

comp_operator ::=  "<" | ">" | "==" | ">=" | "<=" | "!="
                   | "is" ["not"] | ["not"] "in"

因此,与任何其他链式比较一样,a in b in c 等价于 (a in b) 和 (b in c)(除了 b 仅计算一次。

'a' in arr in arr 为 false 的原因是 arr in arr 为 false。 x in x 唯一一次为 true 的情况是 x 是对 __contains__ 进行子字符串比较的类型(例如 strbytes) code>),或者它是一个实际上包含自身的容器(例如 lst = []; lst.append(lst))。

关于python - `in` 运算符链接出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50866585/

相关文章:

python - 正则表达式 - 匹配一个字符及其所有变音符号(又名重音不敏感)

python - 向 QTreeView/QFileSystemModel 中的项目添加附加信息

f# - 运算符优先级和关联

java - 为什么Java中没有(123 == 0123)?

c - 关于 C 中圆括号的使用

Haskell 类型运算符优先级

c++ - int/float/string值之间的操作,组合太多

python - linux python 中不存在unittest.test命名空间

python - 在python中将输入限制为仅整数并显示错误消息

Python ijson 解析文件(ijson 来自 softwaremaniacs.org)