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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM