為何沒有刪除列表中的全部元素?
解釋:按照執行順序,第乙個空格被刪除之後,後面的元素會前移(變成['空格','空格','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 傳遞待刪除元素,如果多...