Я новичок в Python, и я хочу сделать алгоритм Дейкстры, и у меня возникла проблема в самом начале.Добавление к объекту в списке заканчивается добавлением ко всем объектам списка
У меня есть объекты для вершин и ребер:
class Vertex:
minDistance = float('inf')
previousVertex = None
edges = []
id = None
name = None
def __init__(self, id, name):
self.id = id
self.name = name
class Edge:
source = None
target = None
weight = None
def __init__(self, source, target, weight):
self.source = source
self.target = target
self.weight = weight
Я хочу взять вершину и его свойство краев добавить каждое ребро, которое начинается в нем. Сделайте это для каждой вершины у меня есть:
vertices = []
def createGraph(self, vertices, edgesToVertices):
self.vertices = vertices[:]
for x in vertices:
for edge in edgesToVertices:
if edge.source is x.id:
x.edges.append(edge)
Проблема заключается в том, когда я добавляю на последней строке, ребро добавляется все вершины в списке. Может кто-нибудь объяснить, что я делаю неправильно и почему?
Вы должны использовать '==' not 'is' для проверки равенства. Я сомневаюсь, что это источник вашей проблемы, хотя –
удалите три строки сразу под 'class Edge:'. Если вы хотите иметь атрибуты по умолчанию, используйте их как аргументы по умолчанию для '__init__' –
То же самое для' Vertex'. Я думаю, проблема в том, что все ваши вершины имеют один список «edge» –