gpt4 book ai didi

python - 'greater than or equal' 集合与字符之间的比较如何工作

转载 作者:行者123 更新时间:2023-12-02 18:32:11 25 4
gpt4 key购买 nike

我正在查看 Numpy 源代码 here ,我发现了以下代码,它确保用户不会同时将 'C''F' 传递给 requirements争论。

if requirements >= {'C', 'F'}:
raise ValueError('Cannot specify both "C" and "F" order')

我很好奇如何使用 >= 进行这样的检查。我找到了 this回答 SO 和 this在 python 文档中。从这些我了解到,使用词法顺序,它首先比较两个第一个元素,如果它们相等,则看下一个元素,如果它们不同,则确定哪个较小。

当我用用户传递参数 'A'、'C'、'F'listtuple 的示例进行尝试时code> 按预期工作,但是当我尝试使用 set 时,我得到了不同的结果:

['A', 'C', 'F'] >= ['C', 'F']  # False
('A', 'C', 'F') >= ('C', 'F') # False
{'A', 'C', 'F'} >= {'C', 'F'} # True

我试图专门研究集合的词法排序,但由于集合也用于“数学”意义上,所以我发现的大多数示例和文章都使用列表。那么为什么集合之间的比较不同呢?

最佳答案

对于集合 >= 简单地意味着它有相同或更多的项目。订购不涉及它。所以这两个比较都是正确的:

{'C', 'F'} == {'C', 'F'}
{'F', 'C'} == {'C', 'F'}

这些集合都是相等的。添加一个字符,它们不再相等:

{'A', 'C', 'F'} != {'C', 'F'}

第一个集合现在被视为“大于”,因为它包含所有右手集合,以及更多:

{'A', 'C', 'F'} > {'C', 'F'}

同样,顺序没有区别:

{'F', 'C', 'A'} > {'C', 'F'}

这意味着大于或等于将匹配具有所有字符的所有集合,即使还有其他字符也是如此:

{'C', 'F'} >= {'C', 'F'}
{'A', 'C', 'F'} >= {'C', 'F'}
{'F', 'C', 'A'} >= {'C', 'F'}

但是去掉'C'或者'F',它就不再等于也不大于了。事实上,如果它只包含 'C''F' 它将被视为“小于”:

{'C'} < {'C', 'F'}
{'F'} < {'C', 'F'}

但是加上其他字符,就不再等于、大于、小于了。所有这些都将为 False

{'A', 'B', 'Q'} == {'C', 'F'}
{'A', 'B', 'Q'} > {'C', 'F'}
{'A', 'B', 'Q'} < {'C', 'F'}

{'A', 'C', 'Q'} == {'C', 'F'}
{'A', 'C', 'Q'} > {'C', 'F'}
{'A', 'C', 'Q'} < {'C', 'F'}

只有不等于为真:

{'A', 'B', 'Q'} != {'C', 'F'}
{'A', 'C', 'Q'} != {'C', 'F'}

这意味着如果 requirements 包含 'C',则 requirements >= {'C', 'F'} 将返回 true和 'F',不考虑顺序,而且如果项目多于 'C''F',但它如果 requirements 仅包含 'C''F' 之一或两者都不包含,则不成立。

关于python - 'greater than or equal' 集合与字符之间的比较如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69280479/

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