python循環刪除列表中的元素時遇到的坑

今天在寫測試用例的時候,忽然想到以前剛學python時,作過一個循環刪除列表中元素的練習題,如今把當時踩的坑總結一下,但願能對你們有所幫助。

具體的場景是這樣的:python

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

這種寫法看起來並沒什麼問題,獲得的應該是一個空的列表,其實否則,運行後的結果是這個樣子的:測試

 

 咦?究竟是哪裏出了問題呢,其實只要去了解一下 for 循環的底層原理,就很容易明白:spa

data 這個列表在內存中是這樣存儲的:blog

 當第一次執行 for 循環時,默認刪除索引爲1 的元素,即刪除 「賣茶葉」,刪除後的列表是:索引

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

 當第三次執行 for循環時,index 在 2的基礎上再加1,即刪除索引爲3,從上面的列表中咱們能夠看到,索引爲 3 的元素是「賣手機」,刪除後的列表是:for循環

 

 第四次執行for 循環時,index 在3的基礎上加1,即刪除索引爲4的元素,而這時的列表只有兩個元素了,沒法找到索引爲4 的元素,即沒法執行刪除操做,因此會將列表直接打印出來。基礎

那麼,重點來了,怎麼解決這個問題呢,仔細想一下,正序刪除列表時因爲每次刪除一個元素後,後面的元素會頂上來,因此致使刪不乾淨,若是咱們倒序刪除呢,咱們來試一會兒:

 此次再運行後的結果是:原理

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

data 這個列表在內存中是這樣存儲的:

第一次執行 for 循環時,因爲是倒序因此會默認刪除最後一個元素,即「賣手機」,刪除後的列表是:

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

 

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

最後的最後,再爲你們奉上幾種其餘的方法,也能夠達到遍歷刪除列表中元素的效果哦!

方法一:注意:pop() 函數默認是刪除列表的最後一個元素哦

 方法二:

 

 

 

哪怕是最沒有但願的事情,只要有一個勇敢者去堅持作,到最後就會擁有但願。

相關文章
相關標籤/搜索