小能豆

将数字 1 添加到集合中没有效果

py

我无法将整数添加1到现有集合中。在交互式 shell 中,我这样做:

>>> st = {'a', True, 'Vanilla'}
>>> st
{'a', True, 'Vanilla'}
>>> st.add(1)
>>> st
{'a', True, 'Vanilla'}   # Here's the problem; there's no 1, but anything else works
>>> st.add(2)
>>> st
{'a', True, 'Vanilla', 2}

这个问题是两个月前发布的,但我认为它被误解了。我正在使用 Python 3.2.3。


阅读 13

收藏
2024-11-12

共1个答案

小能豆

这里的问题在于集合如何处理相等性和唯一性。在 Python 中,True相当于1(因为True == 1计算结果为True)。当你1向已经包含 的集合中添加 时True,Python 会将其视为1已存在于集合中,因为True1在此上下文中被视为相等。

以下是具体发生的步骤:

  1. 您使用 创建一个集合{ 'a', True, 'Vanilla' }
  2. 当您尝试添加时1,Python 会检查集合中是否已存在等效值。
  3. 由于True在集合中,且True == 1,Python 将其视为1重复,因此不会再次添加它。

此行为仅适用于True1,和False0,因为它们与Python 中的bool和等效int

为了确认这一点,您可以检查:

>>> True == 1  # Returns True
True
>>> False == 0  # Returns True
True

简而言之,这不是一个错误,而是 Python 中的故意设计。类型bool是的子类int,并且True和在数字上下文中False被视为10,包括集合成员资格检查。

2024-11-12