1. 程式人生 > >python 刪除正在for循環遍歷的list正確做法

python 刪除正在for循環遍歷的list正確做法

body dex 之前 遍歷 mov pri div clas 結果

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

python 刪除正在for循環遍歷的list正確做法