先放一个python遍历发生的异常:
1 ls =[1,2,3,4,5,6,7,8,9] 2 for i in ls: 3 print("i",i) 4 print("ls",ls) 5 ls.remove(i)
运行结果:
i 1 ls [1, 2, 3, 4, 5, 6, 7, 8, 9] i 3 ls [2, 3, 4, 5, 6, 7, 8, 9] i 5 ls [2, 4, 5, 6, 7, 8, 9] i 7 ls [2, 4, 6, 7, 8, 9] i 9 ls [2, 4, 6, 8, 9]
我期待的是遍历从1~9一个不落,但是每次都跳过一个元素,这让我很意外,好奇,也很纳闷?
原来for 循环在遍历的时候,遍历的对象也是动态的,不是我之前认为的一旦开始遍历ls = [1,2,3,4,5,6,7,8,9],这个list就固定了。
不是这样的!!
这就是很好的例子!
我思考猜测的原因:
在for循环遍历对象时,也是会根据 list 的元素个数进行遍历,如果你对list本身删除了一个元素,元素个数就发生了变化,相当于整个列表向左移动一位,可是这时候index是按照1——>2——>3的方式依次,这样相当于遍历的元素跳过了一位,才有了开始的异常错误。