色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

關于python中remove的一些坑小結

瀏覽:78日期:2022-06-30 14:53:17

前幾天,使用python時遇到這么一個需求,刪除一個列表中值為1的元素。我尋思著使用remove方法,但是remove方法只會刪除第一個,于是我使用for循環去刪除。代碼和運行結果如下:

關于python中remove的一些坑小結

當時這個結果讓我很懵逼,為什么1沒有被刪除完?查了資料發現,是for循環搗的鬼。因為for循環實際是循環的列表下標(索引),同時由于列表的可變性,每一次刪除一個元素,列表的長度就會發生變化,元素的索引也會發生變化。這里來具體分析一下這段代碼:

第一次循環,循環索引為0,此時索引為0的元素是1,滿足條件,因此mylist中的第一個1被刪除,此時mylist變為[1,2,1,1,3,4];

第二次循環,循環索引為1,此時新列表中,索引為1的元素是2,不滿足條件,mylist仍然為[1,2,1,1,3,4];

第三次循環,循環索引為2,此時列表中,索引為2的元素是1,滿足條件,remove方法會再次刪除一個1,但是remove會刪除第一次出現的1(即刪除索引為0的那個1),因此列表變為[2,1,1,3,4];

第四次循環,循環索引為3,新列表中,索引為3的元素是3,不滿足條件,mylist仍然為[2,1,1,3,4];

第五次循環,循環索引為4,此時列表中,索引為4的元素是4,不滿足條件,mylist仍然為[2,1,1,3,4];

此時,由于新列表長度為5,于是循環結束。

下面的截圖結果能夠很直觀的看出來。

關于python中remove的一些坑小結

至此,如果是這樣的一段代碼,結果應該是怎樣?

關于python中remove的一些坑小結

最終mylist=[’b’,’d’],怎么樣,和你計算的值是否一樣?

回到最初的需求,要怎樣才能刪除所有的1,這里可以使用deepcopy來復制一份,之后一個列表用于循環,一個用于移除值。代碼和結果如下:

關于python中remove的一些坑小結

這樣就可以實現刪除列表中的所有值為1的元素。這里可能有人會問,為什么不直接將l1賦值給一個變量,即l2=l1,這里涉及到引用和深淺復制的問題,因此不在此處解答

附:Python列表的remove方法的注意事項

關于python中remove的一些坑小結

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

解釋:

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

如果想排除初始列表中的部分元素,如何實現?

由上面的情況知道,在遍歷列表的同時對列表執行刪除操作,會造成意外的結果,那么對初始列表進行遍歷,對初始的列表的副本執行刪除操作呢?

關于python中remove的一些坑小結

以上結果顯示,沒有得到預期效果。為什么?

問題出在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方法:

關于python中remove的一些坑小結

(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的坑內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲综合久久久久久888 | 欧美在线视频免费观看 | 亚洲成人黄色在线观看 | 亚洲综合在线另类色区奇米 | 99精品一区二区免费视频 | 欧美日韩在线观看视频 | 国产精品九九免费视频 | 欧美首页 | 91久久国产综合精品女同我 | 日本免费特黄aa毛片 | 久久综合网址 | 乱人伦中文视频在线观看免费 | 国产成人免费观看在线视频 | 国产一级视频播放 | 国产日韩欧美精品一区 | youjizz日韩 | 免费的特黄特色大片在线观看 | 国产欧美另类久久久品 | 日本高清视频免费在线观看 | a中文字幕1区 | 国产三级做爰高清在线 | 久久九九国产 | 欧美成人在线观看 | 国产一区二区三区欧美 | 日韩欧美在线看 | 久久久久久久国产a∨ | 国产精品免费看久久久久 | 亚洲欧美久久精品 | 一区二三国产 | 成人高清在线观看播放 | 亚洲视频 欧美视频 | 日韩a级一片 | 亚洲一区二区天海翼 | 黄色wwwwww| 亚洲网址在线 | 国产亚洲欧美另类久久久 | 最新精品国产 | 久久久亚洲精品国产 | 亚洲精品色一区二区三区 | 色欧美在线 | 大黄一级片|