删除列表元素所犯下的错误:为什么不能循环删除该元素?怎么这个元素还没删完?
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页