python中迴圈刪除列表中元素時的坑
阿新 • • 發佈:2020-09-17
迴圈刪除列表中元素時千萬別用正序遍歷,一定要用反序遍歷!
案例程式碼:
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’刪除,列表變為空列表!