初学Python遍历列表触发list index out of range错误原因咨询
报错原因核心说明
Python 中for 变量 in 列表的遍历逻辑是:每次循环会直接把列表内的元素值赋值给变量,而非列表的下标索引,你写的两段代码都混淆了「元素值」和「索引」的概念,才会出现异常。
第一段代码报错原因
举个实际运行场景就能快速理解:
假设你给函数传入的参数nums = [3, 1, 20]:
- 第一次循环时,
i拿到的是列表第一个元素的值3 - 你写的
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]:
- 第一次循环
i拿到的是第一个元素值1,lista[i]取的就是下标1的元素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
相关产品推荐
相关产品推荐

