先放一個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的方式依次,這樣相當於遍歷的元素跳過了一位,才有了開始的異常錯誤。