python中remove方法的安全使用

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: 自移除(元

我从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:
自移除(元素)
元素本身是一个复杂的实体,其方法覆盖比较运算符

问题

  • 上述代码能否成功地删除对象
  • python如何在内部工作以删除 列表中的元素
  • 当我们同时 迭代并修改相同的列表

  • 您将跳过元素,因为迭代器没有更新以允许删除元素

    您可以反向迭代列表以避免该问题:

    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
    挂钩。

    相关: