遍歷Python列表時安全刪除

2021-07-27 09:03:18 字數 753 閱讀 7595

今天在做工作時,需要遍歷乙個列表把其中不符合要求的刪除掉

於是想到,在遍歷列表的同時刪除元素會不會引起不安全

然後上網搜了一些材料

在這裡總結一下

例如:

a = [1, 2, 3, 4, 5]

for i in a:

if i != 4:

a.remove(i)

print a

上述程式中,我們本來想刪除列表中不等於4的數字

但是輸出的結果卻是

[ 2, 4]
其實是因為我們在遍歷的同時刪除列表中的元素的話,列表的內容就會立刻發生變化,使得後續的遍歷出現問題

上述程式中,i = 1的時候,因為i != 4,所以a.remove(i)刪除了1,列表a變為[2, 3, 4, 5]

i進行下一次迭代的時候,直接跳到了3,所以2保留了下來

最簡單的方法就是在進行遍歷的時候,建立乙個新的列表儲存原列表的內容進行迭代,如:

a = [1, 2, 3, 4, 5]

for i in a[:]:

if i != 4:

a.remove(i)

print a

上述程式用切片操作直接建立了乙個臨時的列表進行迭代,那麼在迭代過程中對原列表a進行操作就不會影響切片列表了

Python遍歷列表時刪除元素

本文首發於我的個人部落格suixin s blogpython的for迴圈可以遍歷乙個列表,但若需要同時將符合條件的元素刪除時,則會出錯。s 1 2,3 4,1 1 s1 s for i in s1 if i 1 s1.remove i print s1 輸出 2,3,4,1 另一種 s2 s fo...

Python語法糖 遍歷列表時刪除元素

python的for可以遍歷乙個list,但是在遍歷的過程中刪除元素常常會得到意想不到的結果甚至程式出現異常,例如 lst 1,1,0,2,0,0,8,3,0,2,5,0,2,6 for item in lst if item 0 lst.remove item print lst 輸出 1,1,2...

Python 遍歷列表刪除操作時不能正確刪除

發現元素間隔進行了刪除,這是什麼情況導致的呢?總結當我們遍歷列表中的元素進行刪除操作的時候,發現並不能滿足我們的需求 ls 1 2,3 4,5 for i in ls if i 1 ls.remove i ls 1 3,5 列表的長度變短,對最初的遍歷長度做了修改,導致超出索引 ls 1 2,3 4...