摘要:對於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]
,這是最基本的用法。
可是對於下面這個:python
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操做涉及了列表下標的移動以及列表中元素的移動,涉及了一些關於數組的知識。其核心問題就是前面所說的。code