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

Python中if判断列表元素时为何无匹配仍返回True?

问题分析

先看你的代码条件:

if 99 and 98 or 97 and 96 in o:

Python里运算符优先级是:in > and > or,这个条件会按以下顺序求值:

  1. 先计算96 in o:96不在列表o里,结果是False
  2. 计算97 and False:非零整数在布尔判断里属于真值,True and False结果为False
  3. 计算99 and 98:两个都是非零整数(真值),and运算返回最后一个真值,也就是98(依然是真值)
  4. 最后计算98 or False:or运算只要有一个是真值就返回真值,结果为98(布尔判断为True)

所以整个条件的布尔值是True,自然会执行print("j")。


关于“加括号并加in o后结果依然相同”的疑问

如果你的写法是类似(99) and (98) or (97) and (96 in o),这和原代码的优先级没区别,结果当然一样。但如果是正确的每个值都判断in o,应该写成:

if (99 in o) and (98 in o) or (97 in o) and (96 in o):

此时四个判断都是False,False and False是False,False and False也是False,False or False是False,条件不成立,不会打印j。如果这么写了结果还是j,大概率是代码没保存或者运行的是旧版本代码,和VSCode编辑器本身没关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:40:16