对于不可清除的对象,是否存在等效的python set
? (例如,可以相互比较但不进行哈希处理的自定义类?)
答案 0 :(得分:6)
如果您的值不可播放,则使用set
时无意义。
只需使用list
即可。如果您的所有对象都可以测试是否相等,那么您必须每次扫描每个元素以测试成员资格。 obj in listvalue
就是这样,扫描列表直到找到相等匹配:
if not someobj in somelist:
somelist.append(someobj)
会为您提供“唯一”值列表。
是的,这将比一个集慢,但是集合只能通过哈希实现O(1)复杂度。
如果您的对象是 orderrable ,则可以使用bisect
module将测试降低到O(log N)复杂度,从而加快操作速度。确保使用从二分测试中收集的信息插入新值以保留订单。
答案 1 :(得分:0)
blist库中有sortedset class,它使用基于排序列表的存储机制,为可比较(且可能不可散列)的对象提供了类似集合的api。