我正在使用python实现Dijkstra的算法,我想知道如何从列表中删除对象的实例? 这是我的代码的一部分,我得到一个错误:“list.remove(x):x不在列表中”。
class Vertex:
def __init__(self, id, name):
self.id = id
self.name = name
self.minDistance = float("inf")
self.previousVertex = None
self.edges = []
def computePath(self, sourceId):
for i in self.vertexes:
if i.id == sourceId:
startVertex = i
startVertex.minDistance=0
break
else:
continue
unvisited = []
for vertex in self.vertexes:
unvisited.append(vertex)
while len(unvisited)!=0:
self.visited.append(startVertex)
unvisited.remove(startVertex)
答案 0 :(得分:1)
list.remove()
将从列表中删除该项目等于您要删除的内容的第一项。
换句话说,算法就是这样做:
def remove(self, item_to_remove):
for index, item in enumerate(self):
if item == item_to_remove:
del self[index]
return
raise ValueError('list.remove(x): x not in list')
然后诀窍是使==
相等测试通过。这是通过__eq__
method完成的。 默认实现仅当两个项目一个且同一个对象时才返回True
,因此item is item_to_remove
为真。
您可以为Vertex
课程创建自定义方法:
def __eq__(self, other):
if not isinstance(other, Vertex):
return NotImplemented
return self.id == other.id # refine as needed
您需要确定两个Vertex
实例何时相等。