Skip to main content
 首页 » 编程设计

Python 3 : Removing list item with for loop, 这是正确的方法吗

2025年05月04日13zdz8207

<分区>

我仍在学习 python 的基础知识,我刚刚花了一段时间阅读如何在 python 中从 for 循环中的列表中删除一个项目。我读过的所有内容都暗示了执行此操作的复杂方法,并且他们说您无法在迭代时从列表中删除项目。但是......这似乎有效:

class Object(): 
    def __init__(self): 
        self.y = 0 
 
object_list = [Object(), Object(), Object()] 
 
for thing in object_list: 
    thing.y += 1 
    if thing.y > 10: 
        object_list.remove(thing) 

为什么这行得通,而其他人却说行不通并编写了复杂的解决方法?是因为不允许在 Python 2 中执行此操作但可以在 Python 3 中执行此操作吗?

这是正确的方法吗?它会按我想要的那样工作还是容易出现错误?如果我打算删除项目,是否建议以相反的顺序遍历列表?

很抱歉,如果之前已经回答过这个问题,但是很难知道哪些资源指的是什么,因为它们都在标签中说“python”(至少,我一直在阅读的那些,也许那是因为所有的我读过的是 python 2?)

谢谢!

编辑:

抱歉,有几个复制和粘贴错误...我已修复...

编辑:

我一直在观看 Raymond Hettinger 的另一个视频...他提到了一种在使用 dict.keys() 迭代字典的同时从字典中删除项目的方法。像这样的东西:

d = {'text': 'moreText', 'other': 'otherText', 'blah': 'moreBlah'} 
 
for k in d.keys(): 
    if k.startswith('o'): 
        del d[k] 

显然,使用键可以在迭代时安全地删除项目。列表有等价物吗?如果有的话,我可以向后遍历列表并安全地删除项目