python列表循環中刪除元素


遍歷n個元素的列表,每次循環時刪除當前元素,那么要多少次結束循環呢。

上一段代碼:

arr = [0,1,2,3,4]
for x in arr:
    print('本次刪除的元素:',x)
    arr.remove(x)
    print('當前列表內容: ',arr)
    print('########in loop ########')
print('----- out loop ------')
print(arr)

結果如下:

本次刪除的元素: 0
當前列表內容:  [1, 2, 3, 4]
########in loop ########
本次刪除的元素: 2
當前列表內容:  [1, 3, 4]
########in loop ########
本次刪除的元素: 4
當前列表內容:  [1, 3]
########in loop ########
----- out loop ------
[1, 3]

 

當第一個下標為0的元素被刪除后,后續元素依次補上來,原本下標為1的變為0。不過下一次循環對應的是下標為1的元素,這樣新的下標為0的元素就被"跳"過了。
總結來說,對列表for循環時,並不是動態的根據列表實際元素挨個遍歷的,而是按照列表初始的長度根據下標next下去的。

類似這樣吧:

int c=len(list)
for(i=0; i<c; i++){
     list(i);
 }

另外,可能是因為字典和集合是無序的,不支持在循環的時候刪除其中的元素:

RuntimeError: dictionary changed size during iteration
RuntimeError: Set changed size during iteration

 


免責聲明!

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



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