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
相关产品推荐
相关产品推荐

