Python判断列表严格降序时循环比较末尾元素索引越界问题
问题原因分析
- 索引越界:原代码循环遍历范围是
range(len(lst)),当i等于列表最后一个索引时,i+1超出了列表的最大索引范围,触发越界错误。 - 提前返回错误:第二种写法在单次比较符合左大于右的条件时就直接返回True,没有完成所有相邻元素的校验,导致结果错误。
解决方法
修正后代码
# 因需求是判断严格降序,建议将函数名改为更贴合语义的is_strictly_descending,如需保留原函数名可自行修改 def is_strictly_descending(lst): # 边界处理:空列表、单元素列表默认符合严格降序规则,可根据实际需求调整该逻辑 if len(lst) <= 1: return True # 循环范围调整为len(lst)-1,避免i+1越界 for i in range(len(lst)-1): # 存在任意一个右侧元素大于等于左侧,直接返回False if lst[i] <= lst[i+1]: return False # 所有相邻元素校验通过,才返回True return True
测试验证
- 输入
[5,4,3,2]:返回True,符合预期 - 输入
[5,4,3,6]:返回False,符合预期 - 输入
[3,5,2,4]:返回False,符合预期
可选简写方案
如果需要更简洁的写法,可以用Python内置的all()函数实现:
def is_strictly_descending(lst): return all(lst[i] > lst[i+1] for i in range(len(lst)-1))
all()函数会校验生成器中的所有表达式是否都为True,只要有一个为False就返回False,逻辑和手动循环完全一致。
内容的提问来源于stack exchange,提问作者user16718429
相关产品推荐
相关产品推荐

