我想__eq__()为自定义类实现一个方法Vertex。然而,当我仔细思考这个问题时,我发现它很奇怪。例如class Vertex(): def __init__(self,node): self.id = node self.adjacent = {}但是对于相邻的dict,它存储这样的数据: {neighbour_vertex1 : edge, neighbour_vertex2 : edge, ....}如果我想实现该__eq__()方法,它应该如下所示:def __eq__(self,other): return self.id == other and self.adjacent == other.adjacent但self.adjacent == other.adjacent需要比较字典 {neighbour_vertex1 : edge, neighbour_vertex2 : edge, ....} {neighbour_vertex1 : edge, neighbour_vertex2 : edge, ....}为了比较它们,我必须定义neighbout_vertex确实是 class 实例的比较函数Vertex。我认为这就像一个先有鸡还是先有蛋的问题,任何建议都值得赞赏。
2 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
建议只比较id
属性。这可能是最好的解决方案,如果可能的话,你绝对应该这样做。
如果不是,你的顶点的结构是什么?它就像一棵树,邻接只走一条路吗?然后这样写就可以了;最终你会用完节点。
如果顶点可以环回,我们将不得不做一些更复杂的事情。基本技巧是维护一堆你没有访问过的顶点,以及一个你已经比较过的节点列表。对于每个循环,从堆栈中弹出顶部元素。如果你看到任何会使元素比较为假的东西,你可以返回。否则,如果您之前没有访问过它们,请将相邻节点放在堆栈上,更新访问过的节点,然后继续。
添加回答
举报
0/150
提交
取消