遍歷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
