慎用python的pop和remove方法

來源:互聯網
上載者:User

標籤:

申明:轉載請註明出處!!!

 

Python關於刪除list中的某個元素,一般有兩種方法,pop()和remove()。

如果刪除單個元素,使用基本沒有什麼問題,具體如下。

1.pop()方法,傳遞的是待刪除元素的index:

x = [‘a‘, ‘b‘, ‘c‘, ‘d‘]x.pop(2)print x------------------result:[‘a‘, ‘b‘, ‘d‘]

  

2. remove()傳遞待刪除元素,如果多個元素一樣,預設刪除第一個:

x = [‘a‘, ‘b‘, ‘a‘, ‘c‘, ‘d‘]x.remove(‘a‘)print x-----------------result:[‘b‘, ‘a‘, ‘c‘, ‘d‘]

  

如果要迴圈刪除符合某個條件的元素,慎用!!

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‘]

  我認為出現這種情況的主要原因是,pop和remove方法屬於‘破壞性操作‘(ps:原諒我自創的定義),x.remove()後,記憶體中原來存放x的位置已經釋放,又重新申請了記憶體存放新的x。可以理解為x已經不是原來的x了,而for迴圈中傳遞的x還是原來x在記憶體中的位置,所以在x.remove(i)後,for迴圈找不到x了,後面的刪除即無法完成。為了完成迴圈刪除list元素的問題,我推薦用下面的方法。

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_newprint x----------------------result:[‘a‘, ‘d‘]

  

慎用python的pop和remove方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.