4

set对于不可散列的对象,是否有等效于 python的方法?(例如,可以相互比较但不能散列的自定义类?)

4

2 回答 2

7

如果您的值不可散列,那么使用set.

只需使用 alist代替。如果您的所有对象都可以测试是否相等,那么您每次都必须扫描每个元素测试成员资格。obj in listvalue这样做,扫描列表直到找到相等匹配:

if not someobj in somelist:
   somelist.append(someobj)

会给你一个“独特”值的列表。

是的,这将比集合慢,但集合只能通过 hashes实现 O(1) 复杂度。

如果您的对象是可订购的,您可能可以通过使用该bisect模块将测试降低到 O(log N) 复杂度来加快操作。确保使用从二分测试收集的信息插入新值以保留顺序。

于 2013-09-16T09:04:58.920 回答
0

blist 库中有一个sortedset 类,它使用基于排序列表的存储机制,为可比较(并且可能是不可散列的)对象提供了一个类似集合的 api。

于 2018-12-19T21:25:19.510 回答