这样写,为什么会报错??

img


没有语法错误,实在不解。希望能得到解答。
哪里有错吗?一直提示少于30个字符,我都不知道说什么了,后面的只能胡说八道了。

每一次的del都会相当于让i+1了,因为这个del删掉了i对应的list中的数,但是i的值没有变,所以它会跳过下一个数,去获取下下个数。
比如:
现在是【10,20,30,40】, i = 0对应10,因为10满足条件,10没了,list变成【20,30,40】,注意,这个时候i对应的就变成了20 。for循环,i =1,i对应变成30,因为30满足条件,30没了,list变成【20,40】。这个时候就是第二个关键,因为for在开始循环的时候,你给他设置的循环次数是多少,那他就一定循环多少次。如果是for i in range(10), 除非i变了,不然绝对会执行10次。如果是a = 10, for i in range(a): a-=1, 尽管循环里面有a-=1,但是循环还是会执行10次。那么在这个例子里面,i会执行4次,就是list现在是【20,40】,它还会继续。因为list实际上只有2个数了,所以index就超出了

for i in range len(list())
这一句的时候,i的值确定了,假如说i最大为10
但是你在删除的时候,list长度在动态变小,i却不变
比如说i增大到6的时候,假如前面的元素全删了,list长度只有5了,i还在变大,取到了list[6]
导致报错

示例 : 【1,2,3,4,5,6,7,8】
执行你的代码的话,i从0增到7
i=1时,变成【1,3,4,5,6,7,8】
i=2时,变成【1,3,5,6,7,8】
i=3时,变成【1,3,5,7,8】
以此类推,i变成5的时候就越界了

解决:从后面往前面遍历 删除

望采纳!