【问题标题】:Python - Why doesnt my newly-unioned set not return value: TruePython - 为什么我的新联合集合不返回值:True
【发布时间】:2020-06-19 14:28:10
【问题描述】:

真的很好奇,浏览了一些基本概念并寻求您的一些友好帮助。

我真的只是想知道为什么我新统一/联合/加入的集合没有按预期返回我的 True 值,而是返回了我的 False 值。

我有以下代码:

mySet1 = {1, 2, "Hello}

mySet2 = {"World!", 2.5, True, False}

myUnion = mySet1.union(mySet2)

print (myUnion)

提前感谢您的帮助:)

【问题讨论】:

  • 因为True == 1False == 0,(注意,issubclass(bool, int) is True
  • 换句话说,在 Python 的类层次结构中,布尔对象是整数对象。有些人不喜欢这个,确实,我个人觉得不太理想,但多半是历史考量的结果,bool类型直到Python 2.3才被添加,在此之前,10 被用作 True 和 False,就像在 C 中一样,所以 bool 类型与以前的用法兼容。
  • 严格来说,像集合这样的基于散列的容器并不关心类型本身。任何散列到相同值并为== 返回True 的对象将在基于散列的容器中被视为相同。

标签: python int set boolean


【解决方案1】:

这与真假的基本定义有关。

>>> {True, 1}
{True}
>>> {False, 0}
{False}

请注意,这很好,因为您仍然可以测试这些条目是否存在:

>>> 1 in {True, 1}
True
>>> 0 in {False, 0}
True

>>> 1 in {True}
True
>>> 0 in {False}
True

【讨论】:

  • 这太好了,谢谢:)
【解决方案2】:

这是因为 True 是 1 作为整数。

真和1是一样的。

如果您从 mySet1 中删除 1,则会显示 True。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多