python遍歷列表刪除多個元素的坑


如下代碼,遍歷列表,刪除列表中的偶數時,結果與預期不符。

a = [11, 20, 4, 5, 16, 28]
for i in a:
    if i % 2 == 0:
        a.remove(i)
print a

得到的結果為:

>>> [11, 4, 5, 28]

其中偶數4和28都沒有刪掉,原因在於for循環在遍歷列表時,是按照元素的索引依次訪問元素的,當刪除其中一個元素后,后面的元素會依次前移,即就是刪除索引1處的元素20后,將訪問索引為2的元素,但由於刪除元素20之后,后面的元素會依次前移,元素4的索引就成了1,就不會訪問了,此時訪問到的元素就是5,元素28沒有刪掉的原因也是一樣。

 

為了解決這個問題,比較好的方法有下面兩種:

倒序循環遍歷

a = [11, 20, 4, 5, 16, 28]
for i in range(len(a)-1, -1, -1):
    if a[i] % 2 == 0:
        del a[i]

filter函數

a = [11, 20, 4, 5, 16, 28]
b = filter(lambda x: x % 2 != 0, a)

我們要刪除的是偶數,保留的是奇數,所以把奇數過濾出來保存到新的列表b中。


免責聲明!

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



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