深入了解Python中pop和remove的使用方法
Python關(guān)于刪除list中的某個(gè)元素,一般有兩種方法,pop()和remove()。
remove() 函數(shù)用于移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)。
remove()方法語法:
list.remove(obj)
pop() 函數(shù)用于移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值。
pop()方法語法:
list.pop(obj=list[-1])
如果刪除單個(gè)元素,使用基本沒有什么問題,具體如下。
1.pop()方法,傳遞的是待刪除元素的index:
x = ['a', 'b', 'c', 'd'] x.pop(2) print x ------------------ result: ['a', 'b', 'd']
2. remove()傳遞待刪除元素,如果多個(gè)元素一樣,默認(rèn)刪除第一個(gè):
x = ['a', 'b', 'a', 'c', 'd']
x.remove('a')
print x
-----------------
result:
['b', 'a', 'c', 'd']
如果要循環(huán)刪除符合某個(gè)條件的元素,慎用??!
x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
for i in x:
if i in y:
x.remove(i)
print x
-----------------------
result:
['a', 'c', 'd']
x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
for i in x:
if i in y:
idx = x.index(i)
x.pop(idx)
print x
--------------
result:
['a', 'c', 'd']
我認(rèn)為出現(xiàn)這種情況的主要原因是,pop和remove方法屬于‘破壞性操作‘(ps:原諒我自創(chuàng)的定義),x.remove()后,內(nèi)存中原來存放x的位置已經(jīng)釋放,又重新申請(qǐng)了內(nèi)存存放新的x。可以理解為x已經(jīng)不是原來的x了,而for循環(huán)中傳遞的x還是原來x在內(nèi)存中的位置,所以在x.remove(i)后,for循環(huán)找不到x了,后面的刪除即無法完成。為了完成循環(huán)刪除list元素的問題,我推薦用下面的方法。
感謝也許小念舊 的提醒,原先的解釋是錯(cuò)誤的,造成上述現(xiàn)象的原因是因?yàn)?,Python中for i in list是用迭代器實(shí)現(xiàn),內(nèi)部隱藏了記錄當(dāng)前迭代器的狀態(tài),而remove方法刪除了當(dāng)前元素后,迭代器自動(dòng)指到下一個(gè)元素,原先的list在內(nèi)存中的位置并未改變。用下面方法可以避免。
x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
x_new = []
for i in x:
if i not in y:
x_new.append(i)
x = x_new
print x
----------------------
result:
['a', 'd']
同時(shí), 可可可心一家 提出把for i in x:改成for i in x[:]:也可以實(shí)現(xiàn),這是因?yàn)閤[:]與x不是同一個(gè)list,相當(dāng)與把x的內(nèi)存拷貝到一塊新的內(nèi)存,當(dāng)對(duì)x做remove操作的時(shí)候,新的內(nèi)存list并沒有受影響。
總結(jié)
以上就是本文關(guān)于深入了解Python中pop和remove的使用方法的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
《python正則表達(dá)式re之compile函數(shù)解析》
如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
- 在Python的列表中利用remove()方法刪除元素的教程
- python dict remove數(shù)組刪除(del,pop)
- python刪除列表元素的三種方法(remove,pop,del)
- Python 使用os.remove刪除文件夾時(shí)報(bào)錯(cuò)的解決方法
- 對(duì)python中數(shù)組的del,remove,pop區(qū)別詳解
- Python列表刪除元素del、pop()和remove()的區(qū)別小結(jié)
- Python列表list內(nèi)建函數(shù)用法實(shí)例分析【insert、remove、index、pop等】
- python for循環(huán)remove同一個(gè)list過程解析
- Python如何在循環(huán)內(nèi)使用list.remove()
- python3列表刪除大量重復(fù)元素remove()方法的問題詳解
相關(guān)文章
python pandas消除空值和空格以及 Nan數(shù)據(jù)替換方法
今天小編就為大家分享一篇python pandas消除空值和空格以及 Nan數(shù)據(jù)替換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
Yolov5訓(xùn)練意外中斷后如何接續(xù)訓(xùn)練詳解
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺上的一個(gè)重要任務(wù),下面這篇文章主要給大家介紹了關(guān)于Yolov5訓(xùn)練意外中斷后如何接續(xù)訓(xùn)練的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
Python中matplotlib庫安裝失敗的經(jīng)驗(yàn)總結(jié)(附pycharm配置anaconda)
最近根據(jù)領(lǐng)導(dǎo)布置的學(xué)習(xí)任務(wù),開始學(xué)習(xí)python中的matplotlib,朋友告訴我這個(gè)很簡(jiǎn)單,然而剛踏入安裝的門檻,就遇到了安裝不成功的問題,下面這篇文章主要給大家介紹了關(guān)于Python中matplotlib庫安裝失敗的經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下2022-08-08
Python常用標(biāo)準(zhǔn)庫之os模塊功能
這篇文章主要介紹了Python常用標(biāo)準(zhǔn)庫之os模塊功能,os模塊的主要功能有系統(tǒng)相關(guān)、目錄及文件操作、執(zhí)行命令和管理進(jìn)程,其中的進(jìn)程管理功能主要是Linux相關(guān)的,此處不做討論,對(duì)Python標(biāo)準(zhǔn)庫os相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2022-11-11

