安排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个物体的数组产生了两组不同大小的物体。谢谢,这是我不确定的定律。谢谢,这是我不确定的定律。