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

初学Python遍历列表触发list index out of range错误原因咨询

报错原因核心说明

Python 中for 变量 in 列表的遍历逻辑是:每次循环会直接把列表内的元素值赋值给变量,而非列表的下标索引,你写的两段代码都混淆了「元素值」和「索引」的概念,才会出现异常。


第一段代码报错原因

举个实际运行场景就能快速理解:
假设你给函数传入的参数nums = [3, 1, 20]:

  1. 第一次循环时,i拿到的是列表第一个元素的值3
  2. 你写的nums[i]就会尝试取列表下标为3的元素,但这个列表总长度只有3,合法下标只有0、1、2,自然就会抛出list index out of range的越界错误。

只有当列表里的所有元素值都小于列表长度时,这段代码才不会报错,但此时逻辑也是完全错误的,比如nums = [0,1,2],你实际取到的是nums[0]、nums[1]、nums[2],看起来好像正常,但只要元素值不符合这个特殊条件就会出问题。


第二段代码输出异常原因

你说的「从第二个元素开始返回」也是同样的逻辑导致的,举个对应的场景:
假设你的lista = [1,2,3,4,5]:

  1. 第一次循环i拿到的是第一个元素值1,lista[i]取的就是下标1的元素2(也就是列表的第二个元素)
  2. 第二次循环i拿到的是第二个元素值2,lista[i]取的就是下标2的元素3(列表的第三个元素)
    以此类推,看起来就像是从第二个元素开始输出,本质还是把元素值当成了下标用。

补充正确写法

  • 如果需要通过下标遍历列表,用你提到的for i in range(len(列表名))即可
  • 如果不需要单独使用下标,直接遍历元素是更简洁的写法,不需要额外取下标:
def number_practice(nums):
    count = 0
    for num in nums:
        if num != 20:
            count += num
        else:
            return count
    return count
  • 如果需要同时拿到下标和对应的元素,推荐用enumerate方法:
for idx, value in enumerate(nums):
    # idx为当前元素下标,value为当前元素值
    print(f"第{idx}个元素的值是{value}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:15:06