解決python 循環遍歷列表刪除多元素及重復元素


在遍歷list時,刪除符合條件的數據,結果不符合預期。

bb列表中為要刪除的元素值,aa為原生列表

aa = [1,2,2,3,4,5,6,7,7,8,9]
bb = [2,7]
for i in aa:
    if i in bb:
        idx = aa.index(i)
        aa.pop(i)
print(aa)

循環遍歷后的結果為

[1, 2, 3, 4, 5, 6, 7, 8, 9]

原因是,刪除aa中的元素后,aa的實際長度變小了,但是循環次數沒有減少,依然按照原來list_aa的長度進行遍歷,所以會造成索引溢出。

解決辦法:

把列表拷貝,然后對原列表進行刪除操作就沒問題了

aa = [1,2,2,3,4,5,6,7,7,8,9]
bb = [2,7]
for i in aa[:]:
    if i in bb:
        idx = aa.index(i)
        aa.pop(idx)
print(aa)

結果為:

[1, 3, 4, 5, 6, 8, 9]

aa[:]是對原始的aa的一個拷貝,是一個新的list_aa,所以,我們遍歷新的list_aa,而刪除原始的list_aa中的元素,則既不會引起索引溢出,最后又能夠得到想要的最終結果。此方法的缺點可能是,對於過大的list,拷貝后可能很占內存

方法二:可以倒敘遍歷列表,刪除

aa = [1,2,2,3,4,5,6,7,7,8,9]
bb = [2,7]
for i in aa[::-1]:
    if i in bb:
        idx = aa.index(i)
        aa.pop(idx)
print(aa)

結果為:

[1, 3, 4, 5, 6, 8, 9]

 


免責聲明!

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



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