作者Arim (Arim5566)
看板Python
標題[問題] python set intersection
時間Tue Jun 25 21:21:20 2013
各位版友好
我目前設計了一個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