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

2022-06-18 01:54:12 字數 1632 閱讀 7120

具體的場景是這樣的:

我當時第一次是這麼寫的:

這種寫法看起來並沒什麼問題,得到的應該是乙個空的列表,其實不然,執行後的結果是這個樣子的:

咦?到底是**出了問題呢,其實只要去了解一下 for 迴圈的底層原理,就很容易明白:

data 這個列表在記憶體中是這樣儲存的:

當第一次執行 for 迴圈時,預設刪除索引為1 的元素,即刪除 「賣茶葉」,刪除後的列表是:

當第二次執行 for 迴圈時,index +1,即刪除索引為2 的元素,注意:這時 的 data 已經發生了變化,此時索引為 2 的元素不是「賣**」 而是 「賣保險」,刪除後的列表是:

當第三次執行 for迴圈時,index 在 2的基礎上再加1,即刪除索引為3,從上面的列表中我們可以看到,索引為 3 的元素是「賣手機」,刪除後的列表是:

第四次執行for 迴圈時,index 在3的基礎上加1,即刪除索引為4的元素,而這時的列表只有兩個元素了,無法找到索引為4 的元素,即無法執行刪除操作,所以會將列表直接列印出來。

那麼,重點來了,怎麼解決這個問題呢,仔細想一下,正序刪除列表時由於每次刪除乙個元素後,後面的元素會頂上來,所以導致刪不乾淨,如果我們倒序刪除呢,我們來試一下子:

這次再執行後的結果是:

竟然真的刪掉了,我們再來詳細看一下它的原理:

data 這個列表在記憶體中是這樣儲存的:

第一次執行 for 迴圈時,由於是倒序所以會預設刪除最後乙個元素,即「賣手機」,刪除後的列表是:

後面會以此類推,直到把整個列表清空。

最後,

總結一下,在使用for 迴圈遍歷刪除列表中的元素時,一定不要用正序去遍歷,用反序遍歷才能達到將列表中的元素清空。

最後的最後,再為大家奉上幾種其他的方法,也可以達到遍歷刪除列表中元素的效果哦!

方法一:注意:pop() 函式預設是刪除列表的最後乙個元素哦

方法二:

哪怕是最沒有希望的事情,只要有乙個勇敢者去堅持做,到最後就會擁有希望。

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的長度生成了有序整數序列,但在遍歷過程中刪除了列表元素,實際列表長度已發生改變,而遍歷的序列仍是按原始列表的長度遍歷的,導致索引超出範圍 二 直接...

python中列表刪除和多重迴圈退出

在學習python的時候,會有一些梗非常不適應,在此列舉列表刪除和多重迴圈退出的例子 列表刪除裡面的坑 比如我們有乙個列表裡面有很多相同的值,假如 nums 1,6,6,3,6,2,10,2,100 我想去掉6,可以這樣寫 nums 1 6,6 3,6 2,10 2,100 for n in num...