为什么没有Python集的查找方法?

时间:2016-08-26 20:12:18

标签: python set

在Python中,尽管不是同一个对象(==is),但对象可以相等。对于任意对象obj1obj2,请考虑以下序列。

assert obj1 == obj2
assert obj1 is not obj2
s = set((obj1,))
del obj1

是否有一种通用而有效的方法可以从obj1s获取obj2(对于任意大的集合s,包含一个等于一个的对象被抬头)? (似乎依赖set.intersect单身set的构造不可靠。)

如果没有,为什么?

显而易见的替代方法是使用dict,其中每个键都存储为自己的值。目前尚不清楚与基于预期set的方法相比,浪费了多少内存。

1 个答案:

答案 0 :(得分:7)

不,设置不是映射,如果obj1 == obj2,则无关紧要。集合用于测试成员资格并保存唯一的(由相等定义),而不是映射回特定对象。请改为使用字典。

否则,您必须迭代并选择一个相等的对象:

obj1 = next(ob for ob in s if ob == obj2)

Python中的集合来自dict类型,因为在添加集合之前(在sets module的形式中为2.3,然后作为built-in type),您使用了将所有键映射到None以跟踪唯一值的字典。添加“查找”功能将撤消此专业化;没有必要为字典已经提供的集合添加功能,特别是因为字典已经发展了许多其他集合功能,例如集合代数操作。