我有两个类别的代表化学结构的结构和片段。如果我比较同一个类的两个实例,则比较应该正常进行,但是如果我比较结构和片段,则比较应该基于唯一标识化学结构的字符串属性。
不幸的是,在我的尝试中,运行时间急剧增加(使用集合和字典的操作。)>
类结构:
和hash用相同的逻辑实现。def __eq__(self, other): if isinstance(other, Structure): return self is other else: return self.cansmiles is other.cansmiles_unstarred def __hash__(self): return hash(self.cansmiles)
Fragment eq
“ cansmiles”字符串可能很长(通常为25,最多100),我试图将其切成薄片而没有运气。
问题是:内置hash
和eq如此高效的魔术是什么?有没有办法有效地覆盖它们?有什么建议吗?更新:是否可以避免每次调用__hash__
时都计算哈希值?
我有两个类别的代表化学结构的结构和片段。如果我比较同一个类的两个实例,则比较应该正常进行,但是如果我将结构与...
就像评论中提到的那样,您有一个更大的问题:您的代码中有错误。尽管is
可能会稍快一些,但它也会做错事。