python中remove函數的坑


摘要:對於python中的remove()函數,官方文檔的解釋是:Remove first occurrence of value.大意也就是移除列表中等於指定值的第一個匹配的元素。
常見用法: a = [1,2,3,4],a.remove(1),然后a就是[2,3,4];對於a = [1,1,1,2],其結果也是[1,1,2],這是最基本的用法。
但是對於下面這個:

a = [1,2,3,4]
for i in a:
      a.remove(i)

# 結果
a = [2,4]

或者說

a = [1,1,1,1,1,2]
for i in a:
      a.remove(1)

#結果
a = [1,1,2]
是不是跟想象中的不一樣,其主要原因如下(^表示當前迭代器位於列表中的位置):
   a = [ 1 , 2 , 3 , 4]
假設此時  ^
默認情況下只想第一個元素,然后執行a.remove(1),然后下標向后移動,列表因為刪除了元素,后面的向前移動,如下:
   a = [ 2 , 3 , 4]
   此時       ^
此時執行a.remove(3),重復上面的移動
   a = [ 2 , 4]
   此時           ^
因為已經到了列表的邊界,故結束遍歷,並返回`a = [2,4]`。

解決辦法:

# 一下為解決辦法之一
d = dict(zip(range(len(a)), a))
[v for k, v in d.items() if v != value]

總結:關於python列表的remove操作涉及了列表下標的移動以及列表中元素的移動,涉及了一些關於數組的知識。其核心問題就是前面所說的。


免責聲明!

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



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