python中remove方法的安全使用
我从list继承了一个UserList类,并实现了以下方法来删除标记为deleted的条目python中remove方法的安全使用,python,python-internals,Python,Python Internals,我从list继承了一个UserList类,并实现了以下方法来删除标记为deleted的条目 def purge_deleted(self): for element in list.__iter__(self): if ele.mark_deleted < 1: self.remove(element) def purge_已删除(自): 对于列表中的元素。\uuuu iter\uuuu(self): 如果删除的元素标记小于1: 自移除(元
def purge_deleted(self):
for element in list.__iter__(self):
if ele.mark_deleted < 1:
self.remove(element)
def purge_已删除(自):
对于列表中的元素。\uuuu iter\uuuu(self):
如果删除的元素标记小于1:
自移除(元素)
元素本身是一个复杂的实体,其方法覆盖比较运算符
问题
您将跳过元素,因为迭代器没有更新以允许删除元素 您可以反向迭代列表以避免该问题:
def purge_deleted(self):
for element in reversed(self):
if ele.mark_deleted < 1:
self.remove(element)
def purge_已删除(自):
对于反向(自身)中的元素:
如果删除的元素标记小于1:
自移除(元素)
如果不反转,迭代器索引将增加,而与任何删除无关;如果删除索引1处的项目,迭代器将继续移动到项目2,即使该项目在删除之前是项目3(跳过之前索引2处的项目)
但是,当您反向删除项时,索引将从1移动到0,任何删除都发生在当前索引的“后面”。是否删除项目1已不再重要
如果存在,将使用任何自定义的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
挂钩。相关: