파이썬에서 Dijkstra의 알고리즘을 구현하는 중이며 목록에서 개체의 인스턴스를 제거하는 방법이 궁금합니다. 다음은 "list.remove (x) : x not in list"오류가 발생하는 코드의 일부입니다.
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)
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__
방법 으로 수행됩니다 . 기본 구현은 반환하는 것입니다 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
인스턴스가 같은지 결정해야합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다