python刪除數組元素導致跳過元素


復現的情況大概可以寫成這樣

abc = [1, 2, 2, 3, 4]
print abc

for index, i in enumerate(abc):
    if i == 2:
        del abc[index]

print abc

可以發現一個問題,按照我的想法這個例子將會把兩個2都刪除了之后得到一個只有元素[1, 3, 4]的abc。

但是實際操作之后發現,其將返回一個[1, 2, 3, 4]的數組

這究竟是怎么導致的????

 

問題就在於我直接在原始數組里面del掉了某個符合條件的元素,比如我在index==1的時候刪掉了第一個2 這個時候再進行下次循環的時候index==2但是原來的數組abc編程了[1, 2, 3, 4],而index==2是3,跳過了2導致了結果與我們的預期完全不一樣了。

 

我用了一個站位的方式來占着需要刪除的家伙,然后讓index依然可以正常尋址,但死這個方法。並不是最好的,因為數組的insert方法在非常大的情況下面效率非常低。

abc = [1, 2, 2, 3, 4]
print abc

for index, i in enumerate(abc):
    if i == 2:
        del abc[index]
        abc.insert(index, None)

print filter(None, abc)

 

應該有更好的辦法?

由於判斷條件的關系。。我直接用了一個更取巧的辦法

abc = [1, 2, 2, 3, 4]
print abc

for index, i in enumerate(abc):
    if i == 2:
       abc[index] = None
       
print filter(None, abc)

直接給符合條件的元素賦值成不可能的值,最后再來過濾,這樣也不用使用O(n)的insert方法,效率更好。


免責聲明!

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



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