python list 使用remove刪除元素會遇到的坑
python中使用list的時候,通常需要用到移除其中某些元素,而remove函式就正好可以移除元素,所以就會想到迴圈遍歷list,利用remove函式移除元素,例如下面一段程式碼:
def remove_item(l,n): for item in l: if item==n: l.remove(item) if __name__ == "__main__": l = [1,2,3,3,3] print("before remove l:",l) remove_item(l,3) print("after remove l:",l)
上面的一段程式碼期望實現的是刪除list中等於3的元素,執行結果為:
刪除之後仍然還有元素3,並沒有完全刪除,所以這種方法是有問題的,那麼問題在哪呢?
那是因為list的遍歷是基於下標的,當你刪除其中的一個元素的時候,列表實際上已經發生了變化,該元素後面的所有元素都往前移動了一個位置,所以下次遍歷的時候就會跳過該元素後面的一個元素,例子中的第二個3就被跳過了,這個3去填了移除的那個3的位置,所以第二個3不會被移除。
解決辦法:方法很多,比如可以把不刪除的元素重新新增到一個新的list中,也可以先拷貝一份列表備份,然後遍歷備份列表,刪除的時候就刪除原列表,再或者基於索引遍歷,當需要刪除元素的時候,索引值對應減1,這些方法都可以根據自己需求選擇。
相關推薦
python list 使用remove刪除元素會遇到的坑
python中使用list的時候,通常需要用到移除其中某些元素,而remove函式就正好可以移除元素,所以就會想到迴圈遍歷list,利用remove函式移除元素,例如下面一段程式碼:def remove
Python3基礎 list remove 刪除元素
markdown list 理解 跨平臺 解釋 -- rule download coder ? python : 3.7.0 OS : Ubuntu 18.04.1 LTS
關於List集合remove刪除元素的問題
執行如下程式碼: public static void test1(){ List<String> list = new ArrayList<String>(); list.add("abc"); list.add("abc"); list.add
【python】 List新增,刪除元素的幾種方法
python中List新增元素的幾種方法 List 是 Python 中常用的資料型別,它一個有序集合,即其中的元素始終保持著初始時的定義的順序(除非你對它們進行排序或其他修改操作)。 在Python中,向List新增元素,方法有如下4種方法(append(),extend(),insert()
list中刪除元素的方法:pop(x)和remove(x)
簡單總結一下: list.remove(x)中的引數是列表中元素,即刪除某個元素;list.pop([i])中的i是列表中元素的索引值,這個i用放括號包裹起來,意味著還可以不寫任何索引值,如上面操作結果,就是刪除列表的最後一個。 給看官留下一個思考題,如果要像前面那樣,能
Java 中list(ArrayList)的foreach遍歷方式呼叫list的remove刪除元素,不丟擲ConcurrentModificationException
關於list刪除元素的當時有很多,具體可以參考下面這個部落格。 https://blog.csdn.net/claram/article/details/53410175 裡面提到了list的foreach遍歷方式刪除元素,會丟擲ConcurrentMo
List 中刪除 元素
class 取出 iterator dto min iter clas HA ati 從List 中 取出元素, 小於1000 的去除 其他便利 remove 會報錯 public static List<OrderReminderDTO> checkRe
python 原生列表刪除元素方法總結
inf ima 技術 image rem move 方法 .com pytho 一、列表方法remove(),按值刪除,刪除首個符合的元素 二、列表方法pop(),按索引刪除,默認刪除最後一個元素 三、del函數,刪除
JAVA基礎第四章-集合框架Collection篇 JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性:封裝、繼承、多型 JAVA基礎第三章-類與物件、抽象類、介面 記一次list迴圈刪除元素的突發事件!
業內經常說的一句話是不要重複造輪子,但是有時候,只有自己造一個輪子了,才會深刻明白什麼樣的輪子適合山路,什麼樣的輪子適合平地! 我將會持續更新java基礎知識,歡迎關注。 往期章節: JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性
[work] python list補齊元素
list2 += [None for i in range(len(list1)-len(list2))] In [194]: l1 = range(5) In [195]: l2 = range(2) In [196]: l2.extend(["null"]*(len(l
C#遍歷List並刪除元素的方法概述
1、使用foreach遍歷並刪除元素 因為在foreach中刪除元素時,每一次刪除都會導致集合的大小和元素索引值發生變化,從需導致在foreach中刪除元素會出現異常。 2、使用for遍歷
遍歷List集合刪除元素的出現報錯
遍歷List集合刪除元素的出現報錯 遍歷List集合刪除元素的時候會發生索引越界異常或內容遍歷不全等問題。 例子: List<String> al = new ArrayList<String>(); al.
python os.remove刪除檔案(檢查是否被佔用,處理被佔用無法刪除時的系統報錯)
import os dhvideopath = r'C:\RecordDownload' aa = os.path.exists(r'C:\RecordDownload\NVR_ch1_main_20171231230001_20180101000001.asf') bb
java中ArrayList使用remove刪除元素時幾種常見的問題及解決辦法
一,for迴圈使用remove()刪除座標來刪除元素。 問題現象:迴圈的時候被刪除元素的下個元素不能讀取到。程式碼現象如下: List<String> testList1 = new ArrayList<Stri
List正確刪除元素方法
個人總結:有意思,for 原理是Iterator實現,如果你只是刪除List裡面元素,會導致Iterator判斷hasnext時數量不同而報錯。這個是使用ArrayList.remove(Object xx)的方法。 正確是使用Iterator的remive()方法來刪除
leetcode 747. Largest Number At Least Twice of Others 至少是其他數字兩倍的最大數 python list.remove()沒有返回值
class Solution: def dominantIndex(self, nums): """ :type nums: List[int]
為什麼ArrayList在使用迭代器迭代元素時不能使用List.remove()刪元素,而是使用Iterator.remove()刪元素
其實,我相信有一定經驗的都已經知道了,把標題的“為什麼”去掉讀一遍,但是具體是為什麼?今天本人跟進原始碼(jdk7)探了個究竟。注:這篇文章只介紹使用list.remove()丟擲ConcurrentModificationException的原因,其它引數及異常不作介紹。直
遍歷list時刪除元素的正確做法
我們往往會遇到需要刪除list中滿足條件的元素。舉例: List<string> list_str =new List<string>() { "A","B","B",
python list刪除元素是要注意的坑點
我們直接先給出輸出與預期不同的程式碼 In[28]: a = [1,2,3,4,5,6] In[29]: for i in a: ...: a.remove(i) ...: In[30]: a Out[30]: [2, 4,
for循環裏面不要進行remove操作,for循環裏remove元素後,list的下標會減小,導致遍歷不完全
body 代碼 2.0 class equals tostring arraylist 執行 align p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px "Helvetica