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

Python for循环内赋值语句的and-or表达式含义是什么?

问题解答

1. Python中and/or的作用

  • 二者是Python内置的布尔运算符,不限制只能在if-else分支中使用,可以在任意表达式场景使用,最终会返回参与运算的实际值,同时支持短路求值规则:
    • a and b:如果a被判定为假,直接返回a的值,不会计算b;如果a为真,返回b的计算结果
    • a or b:如果a被判定为真,直接返回a的值,不会计算b;如果a为假,返回b的计算结果
  • 补充判定规则:Python中数值0、空字符串、None、空容器都会被判定为假,其余值为真。这种and/or组合的写法在Python旧版本中常用来替代三元表达式,逻辑更简洁。

2. 赋值语句逻辑拆解

你用到的赋值语句:

m[i] = m[i-1] and p[i-1] == '*' or (i > 1 and m[i-2] and p[i-1] == '*')

由于Python中and的运算优先级高于or,所以代码会先分别计算or左右两边的and组合表达式,再对两个结果做or运算,等价于如下判断逻辑:

两个条件满足任意一个则m[i]为真,否则为假:

  1. 前一位的m[i-1]为真,且当前遍历到的字符串字符p[i-1]是*
  2. 遍历索引i大于1、前两位的m[i-2]为真,且当前遍历到的字符串字符p[i-1]是*

也可以用三元表达式写为完全等价的版本,逻辑更直观:

m[i] = True if (m[i-1] and p[i-1] == '*') or (i>1 and m[i-2] and p[i-1] == '*') else False

3. 运行结果验证

你的初始m列表全为0(0在布尔判定中为假),逐轮遍历结果和你给出的输出完全匹配:

  • i=1:m[0]是0,第一个and直接返回0;i>1不成立,括号内整体为假,所以0 or 假返回False → m[1]=False
  • i=2:m[1]是False,第一个and返回False;i>1成立但m[0]是0,括号内and返回0,所以False or 0返回0 → m[2]=0
  • i=3:m[2]是0,第一个and返回0;m[1]是False,括号内返回False → 0 or False返回False → m[3]=False
  • 后续遍历逻辑完全一致,始终没有触发为真的条件,最终输出结果为[0, False, 0, False, 0, False]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 04:06:03