python列表中remove()函數的使用方法詳解
1. 基本使用
remove() 函數可以刪除列表中的指定元素
語法
list.remove( element )
參數
- element:任意數據類型(數字、字符串、列表等)
2. 刪除普通類型元素
刪除一個列表中「存在」的數字或字符串
list1 = ['zhangsan', 'lisi', 1, 2] list1.remove(1) # 刪除數字 print(list1) list1.remove('zhangsan') # 刪除字符串 print(list1)
輸出:
[‘zhangsan’, ‘lisi’, 2]
[‘lisi’, 2]
如果列表中「不存在」想要刪除的元素,則會報錯
list1 = [1, 2, 3] list1.remove(4)
輸出:
Traceback (most recent call last):
File “E:/data/PrCharm/test1/55.py”, line 2, in <module>
list1.remove(4)
ValueError: list.remove(x): x not in list
# 值錯誤: 需要刪除的值不在列表中
3. 刪除對象類型元素
刪除一個列表中「存在」的對象元素(列表、元祖等)
list1 = [1, 2, [3, 4], (5, 6)] a = [3, 4] b = (5, 6) list1.remove(a) # 刪除列表類型 print(list1) list1.remove(b) # 刪除元祖類型 print(list1)
輸出:
[1, 2, (5, 6)]
[1, 2]
需要註意的是:remove刪除對象類型的前提是,列表中的某個「元素」是對象類型,以下這種方式會報錯
list1 = [1, 2, 3] list1.remove([1,2])
輸出:
Traceback (most recent call last):
File “E:/data/PrCharm/test1/55.py”, line 2, in <module>
list1.remove([1,2])
ValueError: list.remove(x): x not in list
# 值錯誤: 需要刪除的值不在列表中
4. 一次隻刪一個元素
上面的案例中,列表 [1, 2] 看似在列表 [1, 2, 3] 中存在,實際上, remove() 函數判斷元素是否在列表中存在的標準是:匹配列表中的「單個元素」,而不是整個列表。
remove() 函數會遍歷列表中的每一個元素,查看是否有元素與之匹配,匹配到相同的元素才會執行刪除,這也就意味著 remove() 函數一次隻能刪除一個元素。
自己刪自己也不行,因為自己並不在自己的元素中
list1 = [1, 2, 3, 4, 5] print('我自己在我自己裡面嗎?', list1 in list1) list1.remove(list1)
輸出:
Traceback (most recent call last):
File “E:/data/PrCharm/test1/55.py”, line 3, in <module>
list1.remove(list1)
ValueError: list.remove(x): x not in list
我自己在我自己裡面嗎? False
5、Python列表的remove方法的註意事項
為何沒有刪除列表中的全部元素?
解釋:
按照執行順序,第一個空格被刪除之後,後面的元素會前移(變成[‘空格’,’空格’,’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方法:
(3)另外準備一個空列表,遍歷初始列表時,將符合條件的元素逐一加入到空列表當中(利用列表的append方法)。
這種方法,思路上與remove方法相反,但執行的操作差不多,時間復雜度也與remove方法差不多,無需引入copy模塊。
另外,對於列表的remove方法,python基礎教程第二版給出的說明是:
remove方法用於移除列表中某個值的第一個匹配項:
>>>x=[‘to’,’be’,’or’,’not’,’to’,’be’]
>>>x.remove(‘be’)
>>>x
[‘to’,’or’,’not’,’to’,’be’]
總結
到此這篇關於python列表中remove()函數使用的文章就介紹到這瞭,更多相關python列表remove()函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python基礎入門之魔法方法與異常處理
- python中列表(list)和元組(tuple)的深入講解
- Python常見異常類型處理
- Python 字典(Dictionary)詳細介紹
- python 中raise用法