python中迴圈刪除列表中元素時的坑

2022-08-09 18:21:16 字數 1680 閱讀 9860

案例**:

def

test(data):

for i in

data:

data.remove(i)

return

data

data = [1, 2, 3]

print(test(data))

乍一看以為會列印出空列表,因為test函式內通過for的方法將data中的元素都刪除了,其實不然,實際輸出如下:

[2]
為什麼會產生這種結果呢? 我們來深度剖析一下:原列表在記憶體中為:

第一次執行到data.remove(i)時將第乙個元素『1』刪除,列表變為:

第二次執行到data.remove(i)時i為第二個元素,即『3』,此時將『3』刪除,列表變為:

此時列表已經沒有第三個元素了,即退出迴圈,將[2]返回。

直接上**:

def

test(data):

for i in data[::-1]:

data.remove(i)

return

data

data = [1, 2, 3]

print(test(data))

此時再執行,發現輸出結果為空列表

倒序刪除原理如下:原列表在記憶體中為:

第一次執行到data.remove(i)時是將倒數第乙個元素『3』刪除,列表變為:

第二次執行到data.remove(i)時i為倒數第二個元素,即『2』,此時將『2』刪除,列表變為:

第三次執行到data.remove(i)時i為倒數第三個元素,即『1』,此時將『1』刪除,列表變為空列表!

Python3中用for迴圈刪除列表中元素的坑

定義乙個學生類,例項屬性有name 姓名 age 年齡 提示使用者分別輸入3個學生資訊 姓名以及年齡 根據使用者輸入的資訊建立3個學生物件,將這3個學生物件存入列表,遍歷列表刪除年齡小於18歲的學生物件,最後輸出列表中剩餘的學生資訊 class student object def init sel...

Python 列表迴圈刪除

列表迴圈刪除中,第一次很容易採坑 如下面案例,我們想把列表中 2全部刪除 alist 1 2,3 1,2 2,3 4 for i in alist if i 2 alist.remove i print alist 我們希望得到 1,3,1,3,4 結果 1,3,1,2,3,4,有乙個2漏掉了 fo...

python迴圈刪除列表元素

如果我們用最常用的方法使用for迴圈正向遍歷列表元素進行刪除,結果如下 一 索引遍歷列表迴圈刪除 執行結果報錯 因為for語句中range 方法按照列表a的長度生成了有序整數序列,但在遍歷過程中刪除了列表元素,實際列表長度已發生改變,而遍歷的序列仍是按原始列表的長度遍歷的,導致索引超出範圍 二 直接...