Skip to main content
 首页 » 编程设计

python之如何在遍历列表时从列表中删除元素

2025年05月04日14EasonJim

相信我,我已经读完了。从列表中删除项目时,python 仍然起作用。 我有一个图形实现。

现在有一个函数应该删除节点附加的一些边。我有一个 Edge 对象列表,想按值删除它们...

代码是这样的:

for edge in node.edgeList: 
... 
   edgeToRemove = edge # edgeToRemove now holds something like <edge.Edge object at 0x107dcaf90> 
   node.edgeList.remove(edgeToRemove) #KINDA WORKS - just doesnt behave consistently...It removes some edges but not others 

删除它们的最佳方法是什么?

请您参考如下方法:

在遍历列表时不要改变列表的长度。它不会工作。

>>> l = range(10) 
>>> for i in l: 
...     l.remove(i) 
...  
>>> l 
[1, 3, 5, 7, 9] 

看到了吗?问题是,当你删除一个项目时,后面的项目都向后移动了一个,但索引的位置保持不变。效果是跳过删除项目之后的项目。根据您正在做的事情,最好使用列表理解。

>>> l = range(10) 
>>> for i in l: 
...     if i in [2, 3, 5, 6, 8, 9]: 
...         l.remove(i) 
...  
>>> l 
[0, 1, 3, 4, 6, 7, 9] 
>>> [i for i in range(10) if not i in [2, 3, 5, 6, 8, 9]] 
[0, 1, 4, 7]