python中list的remove 中的坑

2021-10-24 16:23:55 字數 1046 閱讀 9882

摘要:對於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操作涉及了列表下標的移動以及列表中元素的移動,涉及了一些關於陣列的知識。其核心問題就是前面所說的。

python中改變list中list值的問題

l s 0,0,0 for i in range 3 l 1 1 1 print l 如上 定義乙個空list,新增元素也為list型別。本意是想改變list l中乙個值,使其結果為 0,0,0 0,1,0 0,0,0 但執行的結構下圖所示,將list l中的所有元素都改變了。為找到原因,檢視pyt...

Python中的List推導

list推導 list prehension 看它的英文名就夠煩人的了,我總無法記清 prehension的正確拼寫 為了防止我將這一優秀的特性也忘記,還是將它通俗的描述一下吧。官方教程中說list推導是一種建立list的簡潔方法,通常是乙個表示式跟著是乙個 for 的語句,然後是零個或多個 for...

Python 中的 List 列表

任意物件的有序集合 列表可以包含任何種類的物件 列表都是可變的 列表是有序的 2 常用操作 列表長度 l1 1,2,3,4 print len l1 4 列表拼接 l2 l1 5,6 print l2 1,2,3,4,5,6 生成重複列表 print list 5 list list list li...