You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中in运算符链式调用 True in [True] in [True] 输出False原因求解

核心原因:in是Python的比较运算符,遵循链式比较的特殊求值规则,而非普通运算符的左/右结合优先级逻辑。

首先先明确Python的链式比较规则:所有比较运算符(包括</>/<=/>=/==/!=/is/in)的连续调用,都会被自动展开为and连接的两段判断,且中间的公共操作数只会计算一次,通用逻辑为:
a 比较符1 b 比较符2 c 等价于 (a 比较符1 b) and (b 比较符2 c)
比如大家熟悉的1 < x < 10就是典型的链式比较,等价于1 < x and x < 10,不会被当成(1 < x) < 10计算。

对应你的三段代码分析:

1. 无括号的链式写法

print( True in [True] in [True] )

按照链式比较规则,它会被展开为:

print( (True in [True]) and ([True] in [True]) )

计算过程:

  • 前半段True in [True]结果为True
  • 后半段检查列表[True]是否属于右侧的列表[True]:右侧列表的唯一元素是布尔值True,没有列表类型的元素,因此结果为False
  • 最终True and False的结果为False,和运行结果一致。

2. 左加括号的写法

print( ( True in [True] ) in [True] )

这种写法是把in当成了左结合运算符,强制先计算左侧的True in [True]得到True,再计算True in [True]得到True,和原生链式比较的逻辑完全不同,结果自然不一样。

3. 右加括号的写法

print( True in ( [True] in [True] ) )

这种写法是把in当成了右结合运算符,强制先计算右侧的[True] in [True]得到False,再尝试计算True in False——但in的右操作数必须是可迭代对象,布尔值False不可迭代,因此直接抛出TypeError,同样不符合链式比较的规则。

内容的提问来源于stack exchange,提问作者arsalan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:36:02