av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

基于Python中Remove函數(shù)的用法討論

瀏覽:113日期:2022-07-02 13:59:24

前幾天在進(jìn)行寫程序時(shí)碰到這樣一個(gè)問題

a=[’a’,’b’,’c’,’d’]

b=[’c’,’d’,’e’,’f’]

需要將數(shù)組a中元素,在數(shù)組b中出現(xiàn)過都刪除。第一次寫出程序如下:

a=[’a’,’b’,’c’,’d’]b=[’c’,’d’,’e’,’f’]for x in a: if x in b: a.remove(x)print (a)

最后的輸出結(jié)果為

基于Python中Remove函數(shù)的用法討論

出現(xiàn)這樣的結(jié)果,當(dāng)時(shí)感覺很詫異。但立馬細(xì)細(xì)一想,立馬明白了其中的原因。

當(dāng)x=’c’時(shí),此時(shí)滿足if條件語(yǔ)句,執(zhí)行if下的語(yǔ)句:a.remove(x),也就是將’c’元素從a數(shù)組中刪除。

刪除之后,remove函數(shù)并沒有執(zhí)行結(jié)束。而是將a數(shù)組中索引號(hào)大于刪除元素索引號(hào)的所有元素依次前一位。

此時(shí),x指向a[2],a數(shù)組當(dāng)前的狀態(tài)為:[’a’,’b’,’d’],a[2]中存儲(chǔ)的為元素’d’。

remove函數(shù)返回后,繼續(xù)執(zhí)行for循環(huán),x指向數(shù)組的下一個(gè)索引。

因此導(dǎo)致了’d’元素沒有與數(shù)組b進(jìn)行比較。

后續(xù),將程序進(jìn)行了如下修改:

a=[’a’,’b’,’c’,’d’]c=[’a’,’b’,’c’,’d’]b=[’c’,’d’,’e’,’f’] for x in a: if x in b: c.remove(x)print (c)

程序運(yùn)行結(jié)果如下:

基于Python中Remove函數(shù)的用法討論

雖然問題不是很難,但是這個(gè)細(xì)節(jié)問題一定要把握。

補(bǔ)充知識(shí):Python列表的remove方法的注意事項(xiàng)

基于Python中Remove函數(shù)的用法討論

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

解釋:

按照?qǐng)?zhí)行順序,第一個(gè)空格被刪除之后,后面的元素會(huì)前移(變成[’空格’,’空格’,’12’,’23’]),指針下一次會(huì)指向新列表的第二個(gè)元素(即初始狀態(tài)的第三個(gè)空格),從而初始狀態(tài)的第二個(gè)空格被跳過了,初始第三個(gè)空格被刪除,接著后面的元素又再次前移(變成[’空格’,’12’,’23’]),指針指向新列表的第三個(gè)元素,即初始狀態(tài)的第5個(gè)元素23,然后23被刪除了,因此只剩下[’空格’,’12’]

如果想排除初始列表中的部分元素,如何實(shí)現(xiàn)?

由上面的情況知道,在遍歷列表的同時(shí)對(duì)列表執(zhí)行刪除操作,會(huì)造成意外的結(jié)果,那么對(duì)初始列表進(jìn)行遍歷,對(duì)初始的列表的副本執(zhí)行刪除操作呢?

基于Python中Remove函數(shù)的用法討論

以上結(jié)果顯示,沒有得到預(yù)期效果。為什么?

問題出在copy=ls這一句,這里僅僅是使得copy與ls指向了同一片內(nèi)存(即淺拷貝,shallow copy),并沒有執(zhí)行【開辟一片新內(nèi)存,并且ls內(nèi)存中的內(nèi)容復(fù)制到新內(nèi)存,然后使copy指向新開辟的內(nèi)存,即深拷貝,deep copy】這一系列操作。因此對(duì)copy執(zhí)行的remove操作,和對(duì)遍歷ls列表,實(shí)質(zhì)上還是都是針對(duì)同一片內(nèi)存進(jìn)行操作,因此結(jié)果上一個(gè)例子類似。

若想解決這一問題,有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方法:

基于Python中Remove函數(shù)的用法討論

Python列表的remove方法的注意事項(xiàng)

(3)另外準(zhǔn)備一個(gè)空列表,遍歷初始列表時(shí),將符合條件的元素逐一加入到空列表當(dāng)中(利用列表的append方法)。

這種方法,思路上與remove方法相反,但執(zhí)行的操作差不多,時(shí)間復(fù)雜度也與remove方法差不多,無需引入copy模塊。

另外,對(duì)于列表的remove方法,python基礎(chǔ)教程第二版給出的說明是:

remove方法用于移除列表中某個(gè)值的第一個(gè)匹配項(xiàng):

>>>x=[’to’,’be’,’or’,’not’,’to’,’be’]>>>x.remove(’be’)>>>x[’to’,’or’,’not’,’to’,’be’]

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方歡迎留言討論,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 酒色成人网 | a在线免费观看 | 久久理论片 | 精品一区在线播放 | 中文字幕一区二区三区在线观看 | 日韩一区精品 | 欧美理论片在线观看 | 亚洲精品一| 中文字幕一区二区在线播放 | 久久午夜视频 | 国产蜜臀av | 精品国产区一区二 | 黄网免费看 | 中文字幕免费高清 | 国产精品久久一区二区三区 | 一区二区视频在线 | 婷婷视频网 | 在线观看视频一区二区 | 日韩hd| 亚洲一区二区久久 | 成人免费视频一区二区 | 亚洲一级特黄 | 91麻豆精品一区二区三区 | 一区免费视频 | 国产成人精品毛片 | 999久久久国产精品 亚洲黄色三级 | 免费成人深夜夜行网站 | 51调教丨国产调教视频 | 色婷婷影院 | 天天爽夜夜爽夜夜爽 | 欧美亚洲在线 | 欧美深夜福利 | 九九热精品在线 | 国产三级在线 | 99视频免费在线观看 | 日本少妇中文字幕 | 视频一区二区在线 | 久久精品小视频 | 日韩伦理一区 | av影片在线观看 | 日韩精品少妇 |