我已經設置的對象:如何刪除對象集合中的重複項?
class Test(object):
def __init__(self):
self.i = random.randint(1,10)
res = set()
for i in range(0,1000):
res.add(Test())
print len(res) = 1000
如何從組對象的刪除重複?
謝謝你的回答,它的工作:
class Test(object):
def __init__(self, i):
self.i = i
# self.i = random.randint(1,10)
# self.j = random.randint(1,20)
def __keys(self):
t =()
for key in self.__dict__:
t = t + (self.__dict__[key],)
return t
def __eq__(self, other):
return isinstance(other, Test) and self.__keys() == other.__keys()
def __hash__(self):
return hash(self.__keys())
res = set()
res.add(Test(2))
...
res.add(Test(8))
結果:[2,8,3,4,5,6,7]
但是如何保存順序?設置不支持順序。例如,我可以使用列表而不是集?
謝謝,但如果我有幾個attrs? – Bdfy 2013-03-22 22:06:23
將它們混合以產生唯一的整數散列(例如,在非整數屬性上使用buitlin'hash'函數,並將它們一起使用),並以對您有意義的方式定義相等性。這兩個對象必須共同考慮它們的重複性?用'__eq__'表示。 – 2013-03-22 22:09:52
定義相等和散列的最簡單方法是找到一個與您的對象同構的元組,然後通過使用'collections.namedtuple'(如果適用)或通過構造元組來委託給元組的'__hash__'和'__eq__'按需提供:'def __hash __(self):return hash((self.x,self.y,self.z))'。 – delnan 2013-03-22 22:12:12