如果在迴圈中刪除列表中的元素

2021-10-17 08:28:01 字數 1368 閱讀 3859

我們在在討論這個問題之前,先考慮以下**的輸出結果:

arraylist

list =

newarraylist

(arrays.

aslist

("a"

,"b"

,"c"

,"d"))

;for

(int i=

0;isize()

;i++

)system.out.

println

(list)

;

輸出結果:

[b,d]
以上**的目的是想遍歷刪除list中所有元素,但是結果卻沒有成功。

原因是忽略了乙個關鍵的問題:

當乙個元素被刪除時,列表的大小縮小並且下標也會隨之變化,所以當你想要在乙個迴圈中用下標刪除多個元素的時候,它並不會正常的生效。

也有些人知道以上**的問題就由於陣列下標變換引起的。所以我們試試使用增強for迴圈的形式:

arraylist

list =

newarraylist

(arrays.

aslist

("a"

,"b"

,"c"

,"d"))

;for

(string s:list)

}

執行以上**會丟擲concurrentmodificationexception異常

但是加乙個break就不會了

arraylist

list =

newarraylist

(arrays.

aslist

("a"

,"b"

,"c"

,"d"))

;for

(string s:list)

}

最終找到原因,我們需要使用iterator:

arraylist

list =

newarraylist

(arrays.

aslist

("a"

,"b"

,"c"

,"d"))

;iterator

iter = list.

iterator()

;while

(iter.

hasnext()

)}

next()方法必須在呼叫remove()方法之前呼叫。如果在迴圈過程中先呼叫remove(),再呼叫next(),就會導致異常concurrentmodificationexception。

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 結果如下...

迴圈中刪除List中的元素

remove 方法刪除元素後會立刻更新list的size,因此index也發生了變化,會導致漏掉某些元素。for int i 0 i解決方案一 在刪除某乙個元素後直接break,當然這種情況只適合刪除乙個特定元素,不適合刪除多個元素 解決方案二 index回退一位,如下 for int i 0 i刪...

Python迴圈中刪除列表元素會出現的 坑

python迴圈中刪除列表元素會出現的 坑 前言 在python中,如果在迴圈過程中remove 刪除列表元素可能會出現的一些不易發現的bug。目的 a 11,22,33,44,55,66,77 利用for迴圈刪除a中的33和44錯誤示例 for i in a if i 33 or i 44 a.r...