求助:Python中含字符串与列表的比较表达式输出解析
Python链式比较运算符的运算逻辑解惑
你的困惑源于对Python比较运算符执行逻辑的误解——a == b in foo_list并不是先计算其中某一个子表达式,而是触发了Python的链式比较特性。
核心规则
Python中的比较运算符(包括==、in、<、>等)支持链式使用,表达式x op1 y op2 z会被Python解释为:
(x op1 y) and (y op2 z)
而不是你假设的(x op1 y) op2 z或者x op1 (y op2 z)。
对应你的代码分析
第一个表达式
a == b in foo_list等价于:(a == b) and (b in foo_list)a == b结果为Trueb in foo_list结果为TrueTrue and True最终返回True,这就是第一个输出为True的原因。
第二个表达式
a == c in foo_list等价于:(a == c) and (c in foo_list)a == c结果为False- 逻辑与运算中只要有一个
False,整体结果就是False,所以最终输出False。
加括号后的结果解释
当你给子表达式加括号时,强制改变了运算顺序,破坏了链式比较的逻辑:
(a == b) in foo_list:先计算a == b得到True,再判断True是否在foo_list中(列表里只有字符串"foo"和"bar"),所以返回False。a == (b in foo_list):先计算b in foo_list得到True,再比较字符串a(值为"foo")和布尔值True,显然不相等,返回False。
内容的提问来源于stack exchange,提问作者TheRealM
相关产品推荐
相关产品推荐

