0

我在空间中有一些点,每个点都有一个id. 我在另一组中也有这些点的一个子集,它们具有不同的id值。

如何id为两组点创建一种新类型,以便具有相同坐标的点最终使用相同的id值?

我假设我需要使用它们的坐标生成哈希码,这应该id为具有相同坐标的点提供相同的值,对吧?

我很困惑如何使用它,因为哈希码集比 float[3] 小得多。所以不确定我是否走在正确的轨道上。

4

2 回答 2

1

我不完全确定你在这里的意思,但你可以使用__hash__a tuple

class Point(object):
    def __init__(self,x,y,z):
        self.x = x
        self.y = y
        self.z = z

    def __hash__(self):
        return hash((self.x,self.y,self.z))

    def __eq__(self,other):
        return (self.x,self.y,self.z) == (other.x,other.y,other.z)

现在,包含相同点的对象都散列到相同的值。作为附带的好处,它们现在可以更合理地用作字典键或设置对象。


当然,如果你要写一个这么简单的类,你可能要考虑一个collections.namedtuple。您甚至可以将其子类化(链接中已全部说明)。这样做的好处是对象是不可变的——改变一个可散列的对象并不是一件好事;-)。这些对象也与它们没有__dict__关联,因此如果您创建 100M 个对象,它们可能会更容易记忆。

于 2013-02-11T00:31:46.987 回答
0

哈希码并不意味着对于不相等的对象是唯一的——通常会有一些冲突。它们绝对不能用于测试是否相等。

哈希码用于将对象(希望)均匀地放置在数据结构中。如果要测试是否相等,请测试坐标是否相等。

于 2013-02-11T00:39:32.127 回答