python列表中remove()函數(shù)的使用方法詳解
1. 基本使用
remove() 函數(shù)可以刪除列表中的指定元素
語(yǔ)法
list.remove( element )
參數(shù)
- element:任意數(shù)據(jù)類(lèi)型(數(shù)字、字符串、列表等)
2. 刪除普通類(lèi)型元素
刪除一個(gè)列表中「存在」的數(shù)字或字符串
list1 = ['zhangsan', 'lisi', 1, 2] list1.remove(1) # 刪除數(shù)字 print(list1) list1.remove('zhangsan') # 刪除字符串 print(list1)
輸出:
['zhangsan', 'lisi', 2]
['lisi', 2]
如果列表中「不存在」想要?jiǎng)h除的元素,則會(huì)報(bào)錯(cuò)
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
# 值錯(cuò)誤: 需要?jiǎng)h除的值不在列表中
3. 刪除對(duì)象類(lèi)型元素
刪除一個(gè)列表中「存在」的對(duì)象元素(列表、元祖等)
list1 = [1, 2, [3, 4], (5, 6)] a = [3, 4] b = (5, 6) list1.remove(a) # 刪除列表類(lèi)型 print(list1) list1.remove(b) # 刪除元祖類(lèi)型 print(list1)
輸出:
[1, 2, (5, 6)]
[1, 2]
需要注意的是:remove刪除對(duì)象類(lèi)型的前提是,列表中的某個(gè)「元素」是對(duì)象類(lèi)型,以下這種方式會(huì)報(bào)錯(cuò)
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
# 值錯(cuò)誤: 需要?jiǎng)h除的值不在列表中
4. 一次只刪一個(gè)元素
? ? ? ? 上面的案例中,列表 [1, 2] 看似在列表 [1, 2, 3] 中存在,實(shí)際上, remove() 函數(shù)判斷元素是否在列表中存在的標(biāo)準(zhǔn)是:匹配列表中的「單個(gè)元素」,而不是整個(gè)列表。
? ? ? ? ?remove() 函數(shù)會(huì)遍歷列表中的每一個(gè)元素,查看是否有元素與之匹配,匹配到相同的元素才會(huì)執(zhí)行刪除,這也就意味著 remove() 函數(shù)一次只能刪除一個(gè)元素。
? ? ? ?自己刪自己也不行,因?yàn)樽约翰⒉辉谧约旱脑刂?/p>
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方法的注意事項(xiàng)
為何沒(méi)有刪除列表中的全部元素?
解釋?zhuān)?/p>
按照?qǐng)?zhí)行順序,第一個(gè)空格被刪除之后,后面的元素會(huì)前移(變成['空格','空格','12','23']),指針下一次會(huì)指向新列表的第二個(gè)元素(即初始狀態(tài)的第三個(gè)空格),從而初始狀態(tài)的第二個(gè)空格被跳過(guò)了,初始第三個(gè)空格被刪除,接著后面的元素又再次前移(變成['空格','12','23']),指針指向新列表的第三個(gè)元素,即初始狀態(tài)的第5個(gè)元素23,然后23被刪除了,因此只剩下['空格','12']
如果想排除初始列表中的部分元素,如何實(shí)現(xiàn)?
由上面的情況知道,在遍歷列表的同時(shí)對(duì)列表執(zhí)行刪除操作,會(huì)造成意外的結(jié)果,那么對(duì)初始列表進(jìn)行遍歷,對(duì)初始的列表的副本執(zhí)行刪除操作呢?
以上結(jié)果顯示,沒(méi)有得到預(yù)期效果。為什么?
問(wèn)題出在copy=ls這一句,這里僅僅是使得copy與ls指向了同一片內(nèi)存(即淺拷貝,shallow copy),并沒(méi)有執(zhí)行【開(kāi)辟一片新內(nèi)存,并且ls內(nèi)存中的內(nèi)容復(fù)制到新內(nèi)存,然后使copy指向新開(kāi)辟的內(nèi)存,即深拷貝,deep copy】這一系列操作。因此對(duì)copy執(zhí)行的remove操作,和對(duì)遍歷ls列表,實(shí)質(zhì)上還是都是針對(duì)同一片內(nèi)存進(jìn)行操作,因此結(jié)果上一個(gè)例子類(lèi)似。
若想解決這一問(wèn)題,有3個(gè)辦法法:
(1)
ls=[' ',' ',' ','12','23','abc','aa'] copy=[' ',' ',' ','12','23','abc','aa']
這一辦法對(duì)于已知列表的所有元素,且元素?cái)?shù)量較少,結(jié)構(gòu)較簡(jiǎn)單時(shí)可行,其他情況下不可行。
(2)引入copy模塊的deepcopy方法:
(3)另外準(zhǔn)備一個(gè)空列表,遍歷初始列表時(shí),將符合條件的元素逐一加入到空列表當(dāng)中(利用列表的append方法)。
這種方法,思路上與remove方法相反,但執(zhí)行的操作差不多,時(shí)間復(fù)雜度也與remove方法差不多,無(wú)需引入copy模塊。
另外,對(duì)于列表的remove方法,python基礎(chǔ)教程第二版給出的說(shuō)明是:
remove方法用于移除列表中某個(gè)值的第一個(gè)匹配項(xiàng):
>>>x=['to','be','or','not','to','be']
>>>x.remove('be')
>>>x
['to','or','not','to','be']
總結(jié)
到此這篇關(guān)于python列表中remove()函數(shù)使用的文章就介紹到這了,更多相關(guān)python列表remove()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python飛機(jī)大戰(zhàn)pygame碰撞檢測(cè)實(shí)現(xiàn)方法分析
這篇文章主要介紹了python飛機(jī)大戰(zhàn)pygame碰撞檢測(cè)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python使用pygame實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲中碰撞檢測(cè)的原理與相關(guān)操作技巧,需要的朋友可以參考下2019-12-12python實(shí)現(xiàn)矩陣和array數(shù)組之間的轉(zhuǎn)換
今天小編就為大家分享一篇python實(shí)現(xiàn)矩陣和array數(shù)組之間的轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11pytorch/transformers?最后一層不加激活函數(shù)的原因分析
這里給大家解釋一下為什么bert模型最后都不加激活函數(shù),是因?yàn)閾p失函數(shù)選擇的原因,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-01-01如何基于Python代碼實(shí)現(xiàn)高精度免費(fèi)OCR工具
這篇文章主要介紹了如何基于Python代碼實(shí)現(xiàn)高精度免費(fèi)OCR工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06如何使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)易的ORM模型
ORM(Object Relational Mapping)是一種程序設(shè)計(jì)技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類(lèi)型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。本文將介紹如何使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)易的ORM2021-05-05Python+微信接口實(shí)現(xiàn)運(yùn)維報(bào)警
這篇文章主要介紹了Python+微信接口實(shí)現(xiàn)運(yùn)維報(bào)警的相關(guān)資料,需要的朋友可以參考下2016-08-08windows10環(huán)境下用anaconda和VScode配置的圖文教程
這篇文章主要介紹了windows10環(huán)境下用anaconda和VScode配置的圖文教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家介紹的非常詳細(xì),需要的朋友可以參考下2020-03-03Tensorflow2.1 完成權(quán)重或模型的保存和加載
這篇文章主要為大家介紹了Tensorflow2.1 完成權(quán)重或模型的保存和加載,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11