標籤:
申明:轉載請註明出處!!!
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方法