看板 Python 關於我們 聯絡資訊
各位版友好 我目前設計了一個Point類別 attribute有x,y以及一個pid set 我也設計了__hash__以及__eq__ class Point(object): def __init__(self,x,y): self.x = x self.y = y self.pid= set() def __hash__(self): return 41*self.x+self.y def __eq__(self,other): return self.x == other.x and self.y == other.y 然後我宣告了兩個Point set set1=set() #把point放到set1裏面,而且每個point的pid set不是空的 set2=set() #把point放到set12裏面,而且每個point的pid set是空的 我現在想要取交集,可是我希望取完交集所找出來的point的pid set不是空的,也就是找 出來的point是屬於set1的 set1.intersection(set2) #找出來的pid是空的 set2.intersection(set1) #找出來的pid不是空的,這是我要的結果 請問為什麼會造成這樣的差異? 我想我的問題應該還是回歸到intersection的實作方式@@ 另外想請教一下,我並沒有定義set內部的排序方式,可是他好像還是有自己一套的排序 規則? 例如 p1 = Point(1,1) p2 = Point(2,2) p3 = Point(3,3) set1.add(p2) set1.add(p1) set1.add(p3) 排序出來的是p1,p2,p3 而不是按照加入的先後順序 所以我不太確定set的預設的排序規則是什麼? 謝謝各位版友的指教了 -- ~宅男的四個徵兆~ ∠□ ○ ! * \○/ ★    (○ ? ╦╦└□ " ○□═ □   □> ║║√√ ╦══╦ ∥    |\ 一回家就上PTT 每天想正妹 以當好人為樂 忘記正妹虧欠自己 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.169.131 ※ 編輯: Arim 來自: 140.117.169.131 (06/25 21:28) ※ 編輯: Arim 來自: 140.117.169.131 (06/25 21:28)
darkgerm:set 是無序的,因此你用 for 去走順序不會是你想要的 06/25 21:31
darkgerm:至於你看到的順序是跟實作有關,但你不能依靠他 06/25 21:32
darkgerm:因為實作細節可能會變 如果想要排序就要自己抽出來排 06/25 21:33