我完成了阅读,相信我.从列表中删除项目时,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
Run Code Online (Sandbox Code Playgroud)
删除它们的最佳方法是什么?
迭代时不要更改列表的长度.它不会起作用.
>>> l = range(10)
>>> for i in l:
... l.remove(i)
...
>>> l
[1, 3, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
看到?问题是,当您删除项目时,以下项目都会向后移动一个,但索引的位置保持不变.结果是跳过了被删除项目之后的项目.根据您正在做的事情,列表理解更可取.
>>> 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]
Run Code Online (Sandbox Code Playgroud)