Python中in与!=运算符优先级问题:表达式结果为何不符预期
问题解析
第一个表达式 1 in temp != 2 in temp 输出False的原因
Python中所有比较运算符(包括in、!=、<等)优先级相同,且支持链式比较。链式比较的核心规则是:a op1 b op2 c 等价于 a op1 b and b op2 c,中间的操作数b只会被计算一次。
对于1 in temp != 2 in temp,Python会将其解析为链式比较,等价于:
(1 in temp) and (temp != 2) and (2 in temp)
分步计算:
1 in temp:temp是[1],结果为Truetemp != 2:列表[1]和整数2不相等,结果为True2 in temp:2不在列表[1]中,结果为False
最终True and True and False的结果是False,这就是第一个表达式输出False的原因。
第三个表达式 ((1 in temp) != 2) in temp 输出True的原因
我们可以分步拆解这个表达式:
- 最内层
1 in temp:结果为True - 计算
True != 2:Python中bool是int的子类,True等价于整数1,因此1 != 2的结果为True - 最后计算
True in temp:由于True等价于1,而1在列表temp中,因此结果为True
所以整个表达式的最终结果是True。
内容的提问来源于stack exchange,提问作者helpingstar
相关产品推荐
相关产品推荐

