为何Python中表达式“3==4 in [1,'123',3+4j,4 in [1,2,3]]”的值为False?
为什么Python表达式
3==4 in [1,'123',3+4j,4 in [1,2,3]]的结果是False? 你推理的问题出在对Python比较运算符的结合规则理解错了——你把表达式拆成了(3==4) in [1,'123',3+4j,4 in [1,2,3]],但Python里==和in属于同一优先级的运算符,并且是链式结合的,不是你想的那种左到右直接分组。
咱们一步步拆解正确的求值过程:
先处理最内层的子表达式
4 in [1,2,3]:列表里没有4,所以结果是False,原表达式里的列表就变成了[1, '123', 3+4j, False]。现在原表达式简化为
3 == 4 in [1, '123', 3+4j, False]。根据Python的链式比较规则,这个表达式等价于:(3 == 4) and (4 in [1, '123', 3+4j, False])分别计算两个部分:
3 == 4显然是False;- 检查
4是否在列表[1, '123', 3+4j, False]里:列表里的元素是整数1、字符串'123'、复数3+4j、布尔值False,完全没有整数4,所以这部分结果也是False。
最后计算
False and False,结果自然是False。
简单说,你错误地把表达式的结合顺序理解成了「先算3==4,再判断结果是否在列表里」,但Python的规则是「同时判断3等于4,并且4在列表里」——这两个条件都不成立,所以最终结果是False。
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

