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

为何Python中and语句的条件顺序会引发索引越界错误?

为什么调换and的条件顺序就能解决索引错误?

这是Python中逻辑与(and)的短路求值特性导致的,我给你一步步拆解清楚:

先搞懂and的短路规则

在Python里,用and连接两个条件时,会从左到右依次判断:

  • 如果第一个条件为False,Python会直接返回False,完全不会去判断第二个条件——这就是“短路”,既提升效率又能避免不必要的错误。

对比两种代码的执行过程

错误代码的问题

def delete_starting_evens(lst):
  while lst[0]%2==0 and len(lst)>0:
    lst=lst[1:]
  return lst

当输入[4,8,10]时:

  1. 循环不断删除首个偶数,直到lst变成空列表[]
  2. 下一次循环判断条件时,先执行lst[0]%2==0——但空列表没有索引0,直接触发IndexError,根本没机会判断len(lst)>0

修正后代码的逻辑

def delete_starting_evens(lst):
  while len(lst)>0 and lst[0]%2==0:
    lst=lst[1:]
  return lst

同样处理到lst为空时:

  1. 先判断len(lst)>0,结果是False
  2. 因为and的短路特性,直接跳过第二个条件lst[0]%2==0,循环终止,返回空列表[],完全不会触发索引错误

总结

这种“先判断容器非空,再访问元素”的写法是Python里的常见安全操作,利用短路求值避免了空容器的索引/键访问错误,很多其他编程语言也有类似的逻辑运算符短路规则哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:25:16