我想__eq__()為自定義類實現(xiàn)一個方法Vertex。然而,當我仔細思考這個問題時,我發(fā)現(xiàn)它很奇怪。例如class Vertex(): def __init__(self,node): self.id = node self.adjacent = {}但是對于相鄰的dict,它存儲這樣的數(shù)據(jù): {neighbour_vertex1 : edge, neighbour_vertex2 : edge, ....}如果我想實現(xiàn)該__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 實例的比較函數(shù)Vertex。我認為這就像一個先有雞還是先有蛋的問題,任何建議都值得贊賞。
2 回答

呼啦一陣風
TA貢獻1802條經(jīng)驗 獲得超6個贊
建議只比較id
屬性。這可能是最好的解決方案,如果可能的話,你絕對應該這樣做。
如果不是,你的頂點的結構是什么?它就像一棵樹,鄰接只走一條路嗎?然后這樣寫就可以了;最終你會用完節(jié)點。
如果頂點可以環(huán)回,我們將不得不做一些更復雜的事情?;炯记墒蔷S護一堆你沒有訪問過的頂點,以及一個你已經(jīng)比較過的節(jié)點列表。對于每個循環(huán),從堆棧中彈出頂部元素。如果你看到任何會使元素比較為假的東西,你可以返回。否則,如果您之前沒有訪問過它們,請將相鄰節(jié)點放在堆棧上,更新訪問過的節(jié)點,然后繼續(xù)。
添加回答
舉報
0/150
提交
取消