昨天在编写业务代码中遇到了一个有意思的小bug,一边遍历一边删除元素符合条件的元素始终没有别删除,特此记录下。
例如:
>>> data=[1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]
>>> for i in data:
... if i==0:
... data.remove(i)
...
>>> print(data)
[1, 1, 2, 8, 3, 2, 5, 0, 2, 6]
>>>以上代码片段是要删除data中元素为0的,但实际结果并不是这样。
出错原因:
python中用for发起任何形式的遍历时,它的遍历顺序都是从最初就确定的,当符合条件,删除第一0元素之后,后面的元素全部前移,但索引并不会随着值向前移动而变化,二是接着上一个位置向后移动,这样就会漏掉。
正确删除方法:
- filter()函数
- 列表解析式
- 深拷贝给一个新列表





Comments | NOTHING