日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python语言remove_慎用python的pop和remove方法

發布時間:2025/4/16 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python语言remove_慎用python的pop和remove方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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元素的問題,我推薦用下面的方法。

感謝也許小念舊?的提醒,原先的解釋是錯誤的,造成上述現象的原因是因為,Python中for?i?in list是用迭代器實現,內部隱藏了記錄當前迭代器的狀態,而remove方法刪除了當前元素后,迭代器自動指到下一個元素,原先的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_new

print x

----------------------

result:

['a', 'd']

同時,?可可可心一家?提出把for i in x:改成for i in x[:]:也可以實現,這是因為x[:]與x不是同一個list,相當與把x的內存拷貝到一塊新的內存,當對x做remove操作的時候,新的內存list并沒有受影響。

總結

以上是生活随笔為你收集整理的python语言remove_慎用python的pop和remove方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。