我从列表继承了一个 UserList 类并实现了以下方法来删除标记为已删除的条目
def purge_deleted(self):
for element in list.__iter__(self):
if ele.mark_deleted < 1:
self.remove(element)
元素本身是一个复杂的实体,具有覆盖比较运算符的方法
问题
- 上面的代码能否成功删除对象?
- python内部如何工作来删除
列表中的元素?
- 当我们同时
迭代并修改同一个列表?
您最终将跳过元素,因为迭代器不会更新以允许删除元素。
您可以迭代列表相反为了避免这个问题:
def purge_deleted(self):
for element in reversed(self):
if ele.mark_deleted < 1:
self.remove(element)
如果不反转,会发生什么情况:无论是否进行任何删除,迭代器索引都会递增;如果删除索引 1 处的项目,迭代器将移至项目 2,即使在删除之前该项目是项目 3(跳过之前索引 2 处的项目)。
当您删除项目时reverse然而,索引从 1 移动到 0,并且任何删除都发生在当前索引的“后面”。第 1 项是否被删除已经不再重要。
The reversed()迭代器 https://docs.python.org/2/library/functions.html#reversed将利用任何自定义__reversed__
钩子(如果存在)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)