【问题标题】:Python set interpetation of 1 and TruePython set 解释 1 和 True
【发布时间】:2015-08-31 07:51:06
【问题描述】:

在 IPython 3 交互式外壳中:

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

In [54]: len(set2)
Out[54]: 3

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

这是因为 1 和 True 得到相同的交互作用,所以假设 set 消除了重复项,那么只有其中一个 (True) 可以保留? 我们如何才能两者兼得?

【问题讨论】:

  • 不要使用集合。试试1 + True。它们是同一个东西,所以不要试图将它们分开
  • 为什么需要同时保留1True?唯一的区别是类型。据我所知,在所有其他方面,它们都是可以互换的。
  • 否则您可以将数字保留为字符串格式并在需要时进行类型转换。
  • set 应该只包含相同类型的元素。那么为什么需要不同的类型呢?

标签: python set


【解决方案1】:

集合是hashables 的集合。即使声明 1 is True 为 False,声明 1 == True 也是 True。因此,它们具有相同的哈希值,不能单独存在于一个集合中,并且你不能将它们都放在一个集合中

编辑 明确地说,正如 jme 指出的那样,这是因为两件事都是真实的——它们是相等的(根据__eq__)并且它们具有相同的hash value(根据@987654326 @)。

在一个完美的世界中,相等的对象也将具有相同的哈希值,幸好这对于内置类型是正确的。

【讨论】:

  • 澄清:具有相同哈希值的两个项目可以出现在同一个集合中。但是,它们必须不相等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2013-05-15
  • 1970-01-01
  • 2020-02-08
相关资源
最近更新 更多