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

Python中‘IndexError: list index out of range’错误排查求助

解决列表移除元素时的IndexError问题

我尝试移除数组中所有大于最大值P的元素,但运行代码时触发IndexError: list index out of range错误,代码及报错信息如下:

原代码

from array import array

A = array("i")
n = int(input("Number of elements: "))
A = [0] * n

print("Type elements of array: ")
for i in range(n):
    A[i] = int(input())

P = int(input("Max: "))

for i in range(n):
    if A[i] > P:
        A.pop(i)

print(A)

报错信息

if A[i] > P:
   ~^^^
IndexError: list index out of range

问题原因

你在遍历列表的同时修改了它的长度:初始列表长度为n,但每次执行A.pop(i)都会让列表长度减1。当循环到后面的索引时,该索引已经超出了当前列表的实际长度,因此触发索引越界错误。比如初始n=5,移除一个元素后列表长度变为4,当循环到i=4时,列表只有0-3的有效索引,自然报错。

解决方法

方法1:倒序遍历索引

倒序遍历可以避免移除元素对后续索引的影响,因为后面的元素被移除后,前面的元素索引不会改变。

# 替换原循环部分
for i in range(n-1, -1, -1):
    if A[i] > P:
        A.pop(i)

方法2:列表推导式(推荐)

直接生成一个过滤后的新列表,这是Python中最简洁高效的写法,不需要修改原列表的结构。

# 替换原循环部分
A = [x for x in A if x <= P]

方法3:遍历列表副本

遍历原列表的副本,这样原列表的修改不会影响遍历的过程。注意remove()会移除第一个匹配的元素,适合有重复元素的场景。

# 替换原循环部分
for num in A.copy():
    if num > P:
        A.remove(num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:01:16