作者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)
1F:推 darkgerm:set 是无序的,因此你用 for 去走顺序不会是你想要的 06/25 21:31
2F:→ darkgerm:至於你看到的顺序是跟实作有关,但你不能依靠他 06/25 21:32
3F:→ darkgerm:因为实作细节可能会变 如果想要排序就要自己抽出来排 06/25 21:33