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

为什么Python中n in l is True这类链式布尔判断返回False

代码返回False的核心原因

这个现象是Python的比较运算符链式求值规则导致的:

  • Python中in、is、==均属于比较运算符,支持链式比较语法,链式比较会自动按逻辑与拆分求值
  • 对形如 a 比较符1 b 比较符2 c 的表达式,等价于 (a 比较符1 b) and (b 比较符2 c),且只会计算到第一个不成立的条件就提前终止返回False

注:这不是运算符优先级导致的问题,是Python为比较运算符专门设计的语法特性,我们常用的0 < num < 100这类范围判断就是该特性的典型用法,只是搭配in、is这类比较运算符时容易忽略链式求值逻辑导致踩坑。

针对你给出的两个表达式的具体拆解

1. print(n in l is True)

按照链式比较规则,等价于:

(n in l) and (l is True)
  • 前半部分n in l结果为True
  • 后半部分l is True判断的是列表[1,2,3]本身是否和True是同一个对象,显然不成立,结果为False
  • 逻辑与运算最终结果为False

2. print(n in l == True)

同理等价于:

(n in l) and (l == True)
  • 前半部分n in l结果为True
  • 后半部分判断列表[1,2,3]是否和True相等,Python中非布尔类型的容器对象和布尔值比较结果都是False
  • 最终结果为False

正确写法验证

你提到的加括号改变运算优先级的写法是正确的:

print( (n in l) is True )
# 输出 True
print( (n in l) == True )
# 输出 True

实际开发中不需要额外加is True或者== True判断,直接使用n in l作为布尔值判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:42:00