先看如下图:
这是因为循环次数在一开始就已经确定了,所以数组删除掉元素后长度变短了,但是要循环的次数还是6次,所以就越界了,我有一篇博客有提到这个 ,而且还有一个问题,为什么a中的另一个4没有被删除?
我们先一步一步来。
当然,解决第一个问题你可能会想到把代码改成这样:
a=[1,2,4,4,5,6]
for i in range(len(a)):
if i >= len(a):
break
if a[i]==4:
del a[i]
else:
print(a[i])
5竟然没有打印出来!!
这是因为删除了4之后,5,6都往前移动了一格,在for中i是不能改变的,所以5的索引变成2,而i刚经历了2,从3开始也就是6
那到底要怎么解决呢?
1.用while循环来代替,while可以修改循环变量i
2.倒序循环,有图的话会很好理解
3.用a的副本来遍历,操作在a上,可以用b=list(a)或者b=a[:]来获取副本,对于过大的list,建议用倒序遍历的方法