1. 程式人生 > >[PYTHON] for循環中關於列表list中remove method 不得不說的秘密

[PYTHON] for循環中關於列表list中remove method 不得不說的秘密

列表 for 通用方法 循環 二次 http 實現 move blog

在學習for loop的時候,是否遇到過這樣情況,在遍歷列表的時候,無論是用remove方法還是通用del 不能刪掉想刪除的元素?

首先list中remove method 可以直接刪除 想刪掉的值,例:a=[‘h‘,‘z‘,‘j‘,1,2,3]->a.remove(h)->a.remove(1)->a=[‘z‘,‘j‘,,2,3]

del 通用方法呢 要使用統一的下標,通過下標來刪掉對應的值,例:a=[‘h‘,‘z‘,‘j‘,1,2,3]->del a[0]->del a[4]->a=[‘z‘,‘j‘,1,3]

但是,我們把他放在for循環裏是什麽樣呢?

技術分享圖片

本來我們想要的是,刪除列表中每一個元素,但是為什麽列表還會剩兩個值?

因為具體過程如下:

1、當第一次刪除後,後面的元素會前移,此時a=[2,3,4,5]#第一個元素可以正常刪除
2、然後指針下一次會指向新列表的第二個元素(即初始狀態的第三個位置),從而初始狀態的第二個位置被跳過了,初始第三個位置被刪除,接著後面的元素又再次前移(變成[2,4,5])

#指針對應的下標為2 ,因為發生位移,第二次遍歷的時候i的值直接指向第二位,也是3
3、指針指向新列表的第三個元素,即初始狀態的第5個元素5,然後5被刪除了,因此只剩下[2,4]

#第一次:a=[1,2,3,4,5]->a=1 第二次:a=[2,3,4,5]->指針發生變法i=3 同理第三次i=5

如果數據量不是特別大的時候,可以嘗試復制一份對應的數據,遍歷舊數據的時候,刪除新數據裏的值,這樣就實現了

技術分享圖片

這樣就實現了刪除列表,或者也可以建立新列表,每次遍歷直接添加需要提取的元素

當然你要想刪除列表,只需要clear method 就好了。

今天寫的是,指針的問題,後面當然沒有什麽用,道理明白就好。

[PYTHON] for循環中關於列表list中remove method 不得不說的秘密