【问题标题】:Creating a set with same values but different position and getting different outputs [duplicate]创建具有相同值但位置不同的集合并获得不同的输出[重复]
【发布时间】:2021-04-22 07:41:25
【问题描述】:

在 [53] 中:set2 = {1, 2, True, "hello"}

输入[54]: len(set2) 输出[54]: 3

In [55]: set2 Out[55]: {'hello', True, 2}

【问题讨论】:

  • 您描述了一个观察结果,但您的问题是什么?
  • 因为1True 是相等的,所以你只能得到其中一个。
  • 这能回答你的问题吗? Sorting a set of values
  • @KlausD.my 的问题是,如果它是无序的,那么为什么没有得到 True 作为 set2 的输出以及为什么进入 set3。
  • @Matthias 是的,两个集合都包含 1 ,一个只得到 False 另一个 False An True 两者都......为什么这个概念不适用于两个集合......如果我听起来像傻瓜,我很抱歉。

标签: python set


【解决方案1】:

改用列表:

set2 = [1, 4.3, 4, 5, "set", True, False]
print(set2)
# [1, 4.3, 4, 5, 'set', True, False]

set3 = [True, False, 1, 4.3, 5, 4, "set"]
print(set3)
# [True, False, 1, 4.3, 5, 4, 'set']

【讨论】:

  • 是的,我们可以更好地使用列表,但只是好奇为什么会发生这种情况只是因为位置不同......因为它说集合是无序的。
【解决方案2】:

在 python 中(在大多数其他计算机编程语言和数学中也是如此),集合是无序的。
所以,{4.3,4,5,"set",True,False}{False, True, 4, 4.3, 5, 'set'}这两组是一样的。

我们不能在已经包含True 的集合中添加1。同样,我们不能在已经包含False 的集合中添加0(反之亦然)。这是因为1True 本质上是相同的,0False 也是如此。
所以,如果我们在已经包含1 的集合中添加True,那么True 将不会被添加到集合中(如set2),
同样
如果我们在已经包含True 的集合中添加1,那么1 将不会被添加到集合中(如set3),因此输出是不同的。

如果顺序很重要,可以使用列表。

>>> list2=[1,4.3,4,5,"set",True,False]
>>> print(list2)
[1, 4.3, 4, 5, 'set', True, False]

>>> list3=[True,False,1,4.3,5,4,"set"]
>>> print(list3)
[True, False, 1, 4.3, 5, 4, 'set']

旁注:

我曾经使用集合,因为它们不存储重复值。因此,如果您不想再次添加重复值,并且为此使用集合,那么这是一种替代方法:

if x not in mylist:
    list.append(x)

【讨论】:

  • 先生,输出如何相同?在 set2 中不打印 True。
  • 因为我们不能在集合中添加True。见this
  • 那么 set3 发生了什么?
  • 我现在已经澄清了答案。
猜你喜欢
  • 2020-12-18
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 2021-02-07
  • 2019-09-29
相关资源
最近更新 更多