gpt4 book ai didi

python - 如何使用等效对象访问集合的元素?

转载 作者:太空狗 更新时间:2023-10-29 16:58:02 24 4
gpt4 key购买 nike

如果我有一个对象与 Python 集合中的一个元素比较相等,但不是同一个对象,是否有合理的方法来获取对该集合中对象的引用?用例将使用集合来识别和共享重复数据。

示例(Python 2.7):

>>> a = "This is a string"
>>> b = "This is a string"
>>> a is b
False
>>> a == b
True
>>> s = set((a,))
>>> b in s
True

如何使用 bs 获取对 a 的引用?我可以想到一种方法,但我不确定它是否与实现无关,你得到的是 a 还是 b编辑: 当 s 有多个元素时,这不起作用;交集很自然地实现了类似[x for x in smaller_set if x in larger_set]

>>> for x in set((b,)).intersection(s): c = x
...
>>> c is a
True

也许一个好的解决方法是使用将每个键映射到自身而不是集合的字典。

最佳答案

我在 python-list 上发现了一个类似的问题:Get item from set .引用get_equivalent(container, item) (Python recipe)有个巧妙的回答.

诀窍是为“key”对象构造一个包装器对象,并使用in 运算符检查包装器是否在集合中。如果包装器散列等于键,则其 __eq__ 方法可以获得对集合中对象的访问权限,并保存对它的引用。讨论中的一个重要观点是,set 元素的 __eq__ 方法必须为无法识别的类型返回 NotImplemented,否则包装器的 __eq__ 可能无法获取打电话。

关于python - 如何使用等效对象访问集合的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8616284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com