安排python';已排序(集合(<;集合>;))

安排python';已排序(集合(<;集合>;)),python,Python,我试图消除包含数千个自定义对象的数组的重复项。 为此,我正在为这些对象实现\uuuuuuhash\uuuuuu和\uuucmp\uuuu函数 将这些函数委托给对象的某个字段(保证唯一的字符串)安全吗 即 任何暗示都非常感谢 。\uuuuuuuuuuuuuu散列的唯一要求是它是唯一的。事实上,这是一个相当优雅的解决问题的方法 编辑:有人向我指出,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu甚至不必是唯一的!相反,只需要相等的对

我试图消除包含数千个自定义对象的数组的重复项。 为此,我正在为这些对象实现
\uuuuuuhash\uuuuuu
\uuucmp\uuuu
函数

将这些函数委托给对象的某个字段(保证唯一的字符串)安全吗

任何暗示都非常感谢

\uuuuuuuuuuuuuu散列
的唯一要求是它是唯一的。事实上,这是一个相当优雅的解决问题的方法

编辑:有人向我指出,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
甚至不必是唯一的!相反,只需要相等的对象具有相同的散列即可。不相等的也可以有相同的散列;事实上,任何东西都可以散列到
0
,这(技术上)是可以的。

\uuuuuuuuuuuuuu散列
的唯一要求是它是唯一的。事实上,这是一个相当优雅的解决问题的方法


编辑:有人向我指出,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
甚至不必是唯一的!相反,只需要相等的对象具有相同的散列即可。不相等的也可以有相同的散列;事实上,任何东西都可以散列到
0
,这(技术上)是很好的。

避免
\uuu\cmp\uuu
。这是一种特殊的方法,建议改用
\uu lt\uu

def __lt__(self,other):
    return self.key < self.other
def\uu lt\uuu(自身、其他):
返回self.key
避免使用
\uuu cmp\uuu
。这是一种特殊的方法,建议改用
\uu lt\uu

def __lt__(self,other):
    return self.key < self.other
def\uu lt\uuu(自身、其他):
返回self.key
两个不相等的对象可能具有相同的哈希值,但两个相等的对象可能没有不同的哈希值。法律:

a == b --> hash(a) == hash(b) 
描述了这一点。否则,您不能将它们用作dict键或将其放入is集合。嗯,也许你可以添加它们,但你以后无法检索它们

因此,在委派
\uuuuu hash\uuuuu()
时,为了安全起见,我总是定义
\uuuuuu eq\uuuuu()

def __hash__(self):
    return hash(self.key)

def __eq__(self, other):
    return self.key == other.key

由于要对对象进行排序,还必须添加unutbus
\uu lt\uu()

两个不相等的对象可能具有相同的哈希值,但两个相等的对象可能没有不同的哈希值。法律:

a == b --> hash(a) == hash(b) 
描述了这一点。否则,您不能将它们用作dict键或将其放入is集合。嗯,也许你可以添加它们,但你以后无法检索它们

因此,在委派
\uuuuu hash\uuuuu()
时,为了安全起见,我总是定义
\uuuuuu eq\uuuuu()

def __hash__(self):
    return hash(self.key)

def __eq__(self, other):
    return self.key == other.key

由于要对对象进行排序,还必须添加unutbus
\uu lt\uu()

,顺便说一句,
A
应该继承自
对象
:我将编写
返回散列(self.key)
。让Python调用底层的特殊方法。你是对的,我总是忘记“新样式对象”。使用hash似乎是个好主意,内置的总是让我惊讶:)顺便说一句,
A
应该继承自
object
:我会写
返回hash(self.key)
。让Python调用底层的特殊方法。你是对的,我总是忘记“新样式对象”。使用散列似乎是个好主意,内置的总是让我惊讶:)不,两个对象可能有相同的散列值,所以散列(x)=散列(y)和x!=Y那就完全可以了。它看起来很漂亮,问题是目前有些东西不起作用:)通过这种方式排序(看起来是一样的)两个2500个对象的数组产生了两组不同的大小。不,两个对象可能有相同的散列值,所以散列(x)=散列(y)和x!=Y那就太好了。它看起来很漂亮,问题是有些东西现在不起作用:)这样排序(看起来是一样的)两个2500个物体的数组产生了两组不同大小的物体。谢谢,这是我不确定的定律。谢谢,这是我不确定的定律。