在Python,对象可以是尽管不是同一对象(等于==相对于is).考虑以下任意对象的序列obj1和obj2.
assert obj1 == obj2
assert obj1 is not obj2
s = set((obj1,))
del obj1
Run Code Online (Sandbox Code Playgroud)
有以获得一般且有效的方法obj1从s和obj2(对于任意大的集s发生在包含一个对象,它等于被查找的)?(似乎依赖set.intersect单身人士set的结构并不可靠.)
如果没有,为什么?
显而易见的替代方法是使用dict每个键存储为其自身值的位置.目前尚不清楚与set基于预期的方法相比,处理废物的内存量是多少.
不,套不是映射,如果obj1 == obj2,它应该没关系.集合用于测试成员资格并保存唯一值(由相等定义),而不是映射回特定对象.请改用字典.
否则,您必须迭代并选择一个相等的对象:
obj1 = next(ob for ob in s if ob == obj2)
Run Code Online (Sandbox Code Playgroud)
Python中的集合属于dict类型,在添加集合之前(在sets模块形式的2.3中,然后作为内置类型),您使用了映射所有键的字典None来跟踪唯一值.添加"查找"功能将撤消此专业化; 没有必要为字典已经提供的集合添加功能,特别是因为字典已经发展了许多其他集合功能,例如集合代数操作.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |