gpt4 book ai didi

python - 2 组并集不包含所有项目

转载 作者:IT老高 更新时间:2023-10-28 21:08:36 27 4
gpt4 key购买 nike

为什么我在下面的并集中改变了两个集合的顺序,会得到不同的结果?

set1 = {1, 2, 3}
set2 = {True, False}

print(set1 | set2)
# {False, 1, 2, 3}

print(set2 | set1)
#{False, True, 2, 3}

最佳答案

为什么 union() 不包含所有项目

1True 是等价的并且被认为是重复的。同样 0False 也是等价的:

>>> 1 == True
True
>>> 0 == False
True

使用哪个等效值

当遇到多个等效值时,集合保持第一个可见:

>>> {0, False}
{0}
>>> {False, 0}
{False}

使值不同的方法

要让它们被视为不同,只需将它们存储在 (value, type) 对中:

>>> set1 = {(1, int), (2, int), (3, int)}
>>> set2 = {(True, bool), (False, bool)}
>>> set1 | set2
{(3, <class 'int'>), (1, <class 'int'>), (2, <class 'int'>),
(True, <class 'bool'>), (False, <class 'bool'>)}
>>> set1 & set2
set()

另一种使值不同的方法是将它们存储为字符串:

>>> set1 = {'1', '2', '3'}
>>> set2 = {'True', 'False'}
>>> set1 | set2
{'2', '3', 'False', 'True', '1'}
>>> set1 & set2
set()

希望这能解开谜团并指明前进的方向:-)


从评论中解救出来:

这是打破跨类型等价的标准技术(即 0.0 == 0True == 1Decimal(8.5) == 8.5)。该技术用于 Python 2.7 的正则表达式模块,以强制将 unicode 正则表达式与其他等效的 str 正则表达式区分开来缓存。当 typed 参数为 true 时,该技术也用于 Python 3 中的 functools.lru_cache()。

如果 OP 需要默认等价关系以外的东西,则需要定义一些新关系。根据用例,这可能是字符串的大小写不敏感、unicode 的规范化、视觉外观(看起来不同的东西被认为是不同的)、身份(没有两个不同的对象被认为是相等的)、值/类型对或其他一些定义等价关系的函数。鉴于 OP 的具体示例,他/她似乎期望按类型或视觉区别进行区分。

关于python - 2 组并集不包含所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44489658/

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