Python遍历时删除元素

发布于 2021-04-30  900 次阅读


昨天在编写业务代码中遇到了一个有意思的小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()函数
  • 列表解析式
  • 深拷贝给一个新列表

一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。