gpt4 book ai didi

python - 这些集合操作是什么,为什么它们会给出不同的结果?

转载 作者:行者123 更新时间:2023-12-03 14:00:26 25 4
gpt4 key购买 nike

我在 Pluralsight 上看过这个测试题:

鉴于这些集合:

x = {'a', 'b', 'c', 'd'}
y = {'c', 'e', 'f'}
z = {'a', 'g', 'h', 'i'}
x | y ^ z的值是多少?

预期的答案是:
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}

组合集合(自动丢弃重复项),并将它们从最低到最高排序。

我的问题是:
  • 这个表达式叫什么?
  • 为什么我从 3 个不同的 Python 版本得到 3 个不同的结果?


  • 在 Ubuntu 18.04 上的 Python 3.7.5 上的结果:
    {'c', 'h', 'f', 'd', 'b', 'i', 'g', 'a', 'e'}

    在 Ubuntu 18.04 上的 Python 2.17.17rc1 上的结果:
    set(['a', 'c', 'b', 'e', 'd', 'g', 'f', 'i', 'h'])

    Windows 10 上 Python 3.7.2 的结果:
    {'a', 'd', 'h', 'f', 'b', 'g', 'e', 'c', 'i'}

    这是我为此使用的相同代码的副本:
    https://repl.it/repls/RudeMoralWorkplace

    我想了解这些表达式在幕后发生了什么,以便我可以揭穿为什么我得到不同的结果。

    最佳答案

    您提到的设置操作是:

    ^ - symmetric difference (异或):

    Return a new set with elements in either the set or other but not both.



    示例: {'1', '2', '3'} ^ {'2', '3', '4'} = {'1', '4'}
    | - union (或):

    Return a new set with elements from the set and all others.



    示例: {'1', '2', '3'} | {'2', '3', '4'} = {'1', '2', '3', '4'}
    python中还有其他set操作:

    & - intersection (与):

    Return a new set with elements common to the set and all others.



    示例: {'1', '2', '3'} & {'2', '3', '4'} = {'2', '3'}
    - - difference :

    Return a new set with elements in the set that are not in the others.



    示例: {'1', '2', '3'} - {'2', '3', '4'} = {'1'}
    这些操作的优先顺序是 -, &, ^, | ,所以在你的例子中,我们首先应用 ^ :
    >>> y^z
    {'a', 'c', 'e', 'f', 'g', 'h', 'i'}

    然后 | :
    >>> x|{'a', 'c', 'e', 'f', 'g', 'h', 'i'}
    {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'}

    您描述的不同输出实际上是同一个集合,因为集合没有排序。
    >>> {'c', 'h', 'f', 'd', 'b', 'i', 'g', 'a', 'e'} == {'a', 'd', 'h', 'f', 'b', 'g', 'e', 'c', 'i'}
    True

    集合的字符串表示中显示的任何顺序都是实现细节,不应依赖,因为正如您所发现的那样,它会发生不可预测的变化。

    关于python - 这些集合操作是什么,为什么它们会给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60099992/

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