如何避免Python代码中的“IndexError:list index超出范围”错误

时间:2017-11-19 17:39:04

标签: python python-3.x

修复运​​行中给出的错误的最佳方法是什么?我也有点理解,列表在迭代时不能改变,但它看起来仍然有点抽象。

myList = ["A", "B", "C", "D", "E", "F", "G", ]


for i in range(len(myList)):

    if i == 2:
        del (myList[4])

    print(i, myList[i])

--------------------------运行-------------------- -----------------------------

"C:\Python36\python.exe" 

Traceback (most recent call last):

0 A
  File "C:/Users/reading.py", line 10, in <module>

1 B

2 C

    print(i, myList[i])
3 D

4 F

IndexError: list index out of range

5 G

Process finished with exit code 1

4 个答案:

答案 0 :(得分:1)

相反,Python中的列表可以更改(它是可变的),这就是你刚刚在这里做的:

del (myList[4])

在循环开始时,len(myList)会解析为6。在最后一个循环中,i = 6

print(i, myList[i])

基本上是

print(i, myList[6])

但是,由于您将其缩短为5,因此Python会引发超出范围的错误。

答案 1 :(得分:0)

这是list.pop的用途!

myList = ["A", "B", "C", "D", "E", "F", "G"]

并删除第二个元素:

myList.pop(2)

会将list修改为:

['A', 'B', 'D', 'E', 'F', 'G']

正如评论中所指出的那样,修改listiterating过来绝不是一个好主意。如果必须进行更复杂但与此类似的事情,您可以首先使用list制作myList[:]的副本,然后重复更改copy。但是对于这种情况,list.pop绝对是正确的选择。

答案 2 :(得分:0)

如何:

myList = ["A", "B", "C", "D", "E", "F", "G"]

做的:

for i in range(len(myList)):
    if i == 2:
        del (myList[4])
    try:
        print(i, myList[i])
    except IndexError:
        None
`

答案 3 :(得分:0)

试试这个:

myList = ["A", "B", "C", "D", "E", "F", "G"]

for i in range(len(myList)-4):
    if i == 2:
        del myList[4]
    print(i, myList[i])

0 A
1 B
2 C
>>> myList
['A', 'B', 'C', 'D', 'F', 'G']