a = [1,2,3,4,5,6]
for i in range(len(a)):
if a[i] == 4:
del a[i]
print(a)
#输出
IndexError: list index out of range
原因:
在for循环遍历列表后,实际上已经把列表中的4删除了。但是再次进入for循环时,列表的长度发生了改变,但是循环次数并没有发生改变,导致索引溢出。
我们来着重讲一下为什么循环次数并没有发生改变。
循环变量的取值在一开始就生成了,range(len(a))生成了一个不可改变的生成器[0,1,2,3,4,5],循环变量就依次取值,循环体中可以临时改变循环变量的值,但不会改变生成器。
在寻找答案时,遇见一篇比较详细的文章:https://blog.csdn.net/u013555719/article/details/84550700