刪除列表元素所犯下的錯誤:為什么不能循環刪除該元素?怎么這個元素還沒刪完?
eg:
刪除列表中所有 ‘1’ 的錯誤方法:
x = [1,2,1,2,1,2,1,2,1,1,1,1,1,1] for i in x: if i == 1: x.remove(i) print(x)
輸出的是:
[2, 2, 2, 2, 1, 1, 1]
而正確的方法是:
for i in x[::]: if i == 1: x.remove(i)
另外比如這個:
刪除列表中第一個元素:
x = list(range(20)) for i in range(len(x)): del x[0] print(x)
輸出的卻是:
[]
結論是:
出現這個問題的原因是列表的自動內存管理功能。在刪除列表元素時,python 會自動對列表內存進行收縮並移動列表元素以保證所有元素之間沒有空隙,增加列表元素時也會自動擴展內存並對元素進行移動以保證元素之間沒有空隙。每當插入或刪除一個元素之后,該元素位置后面所有元素的索引就都改變了。 ——《python程序設計(第2版)》 36頁