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

Python循环中列表长度使用疑惑:len(list)与len(list)-1的区别

关于Python列表遍历中len(list)与len(list)-1的使用场景解析

核心原因:range()是左闭右开区间

你遇到的问题本质是**range(a, b)只会生成从a到b-1的整数序列**,它包含起始值但不包含结束值。

两种场景的明确区分

1. 遍历列表所有元素:用range(len(lst))

Python列表的索引从0开始,长度为N的列表,有效索引是0到N-1。range(len(lst))会生成0,1,...,N-1的序列,刚好覆盖所有元素的索引。

对应你的代码,列表长度是5,range(len(lst))即range(5),会生成0,1,2,3,4,这样最后一个元素(索引4的9)就会被正常处理,最终会被加入above_ave列表。

2. 仅遍历到倒数第二个元素:用range(len(lst)-1)

这种场景只出现在需要同时访问当前元素和下一个元素的情况,比如检查相邻元素是否相同:

lst = [1,2,2,3]
for i in range(len(lst)-1):
    if lst[i] == lst[i+1]:
        print(f"索引{i}和{i+1}的元素相等")

如果这里用range(len(lst)),当i取到最后一个索引时,lst[i+1]会超出列表范围,触发IndexError,因此必须用len(lst)-1限制循环的结束位置。

更Pythonic的遍历方式

其实你完全可以不用索引,直接遍历列表元素,代码更简洁且避免索引错误:

for num in lst:
    if num < average:
        below_ave.append(num)
    elif num == average:
        equal_ave.append(num)
    else:
        above_ave.append(num)

修正后的运行结果示例

修改循环后,你的程序输出会变成:

...
8
[5, 6]
[8]
[12, 9]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:15:47