Python列表的remove方法的注意事項

2022-06-18 19:18:13 字數 1332 閱讀 2935

為何沒有刪除列表中的全部元素?

解釋:按照執行順序,第乙個空格被刪除之後,後面的元素會前移(變成['空格','空格','12','23']),指標下一次會指向新列表的第二個元素(即初始狀態的第三個空格),從而初始狀態的第二個空格被跳過了,初始第三個空格被刪除,接著後面的元素又再次前移(變成['空格','12','23']),指標指向新列表的第三個元素,即初始狀態的第5個元素23,然後23被刪除了,因此只剩下['空格','12']

如果想排除初始列表中的部分元素,如何實現?

由上面的情況知道,在遍歷列表的同時對列表執行刪除操作,會造成意外的結果,那麼對初始列表進行遍歷,對初始的列表的副本執行刪除操作呢?

以上結果顯示,沒有得到預期效果。為什麼?

問題出在copy=ls這一句,這裡僅僅是使得copy與ls指向了同一片記憶體(即淺拷貝,shallow

copy),並沒有執行【開闢一片新記憶體,並且ls記憶體中的內容複製到新記憶體,然後使copy指向新開闢的記憶體,即深拷貝,deep

copy】這一系列操作。因此對copy執行的remove操作,和對遍歷ls列表,實質上還是都是針對同一片記憶體進行操作,因此結果上乙個例子類似。

若想解決這一問題,有3個辦法法:

(1)

ls=['

','','

','12

','23

','abc

','aa']

copy=['

','','

','12

','23

','abc

','aa

']

這一辦法對於已知列表的所有元素,且元素數量較少,結構較簡單時可行,其他情況下不可行。

(2)引入copy模組的deepcopy方法:

這種方法,思路上與remove方法相反,但執行的操作差不多,時間複雜度也與remove方法差不多,無需引入copy模組。

另外,對於列表的remove方法,python基礎教程第二版給出的說明是:

remove方法用於移除列表中某個值的第乙個匹配項:

>>>x=['to','be','or','not','to','be']

>>>x.remove('be')

>>>x

['to','or','not','to','be']

python的for迴圈中remove或del的坑

a 1,2,3,4,5 for i in a a.remove i print a 2,4 1 當第一次刪除後,後面的元素會前移,此時a 2,3,4,5 第乙個元素可以正常刪除 2 然後指標下一次會指向新列表的第二個元素 即初始狀態的第三個位置 從而初始狀態的第二個位置被跳過了,初始第三個位置被刪除...

python中list的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,...

慎用python的pop和remove方法

python關於刪除list中的某個元素,一般有兩種方法,pop 和remove 如果刪除單個元素,使用基本沒有什麼問題,具體如下。1.pop 方法,傳遞的是待刪除元素的index x a b c d x.pop 2 print x result a b d 2.remove 傳遞待刪除元素,如果多...