今天寫乙個指令碼的時候,發現結果總是不對,後來折騰了半天,才發現是python在遍歷刪除的時候,有乙個小小的陷阱,這也說明基礎不夠紮實啊……
list = [0,1,2,3,4,5,6,7,8,9,0]
for i in list:
list.remove(i)
print list
這是個專門寫的乙個demo,最終的輸出結果並不是理想中的空,而是[1, 3, 5, 7, 9]
如果想實現全部刪除的功能,應該這樣寫:
list = [0,1,2,3,4,5,6,7,8,9,0]
for i in list[:]:
list.remove(i)
print list
兩段**唯一的區別就是list和list[:]
之所以會產生這種陷阱,原因是在for迴圈的遍歷中,實際上python的做法是從下標0開始依次向後遍歷,直到結束,當某個元素被刪除時,後面的元素全部前移,但遍歷的下標不變,這就導致每刪除成功一次,都會無差別的跳過後面的元素。
而第二段**中,對list的副本進行遍歷,但操作得是list本身,這樣迴圈遍歷就不再受list變化的影響了
java中for迴圈刪除集合陷阱
因為集合的 大小是動態變化 的,當你刪除乙個元素之後,元素中的序號又重新排列,原來第二個應該刪除的元素現在排在了第乙個元素的位置,真正刪除的卻是第三個元素,依次類推,刪除的是第乙個 第三個 第五個 解決辦法 1.迭代器 iteratorit list.iterator while it.hasnex...
js for迴圈的陷阱
一頁面有三個按鈕,點選提示相應內容。相應內容已從後台獲取,並轉化成json陣列。var content 提示1 提示2 提示3 for i in content replace i selector val content i selector click function 結果 點選按鈕,每乙個都...
STL 迴圈刪除容器中元素的方法和陷阱
演算法大師donald knuth 不成熟的優化是一切惡果的根源 permature optimization is the root of all evil stl中的容器主要是兩種 序列式容器和關聯式容器。下面講到的都是我在開發中曾經遇到過的一些問題,有些例子我做了修改,我想初學stl的人基本都...