【发布时间】:2016-08-05 01:15:56
【问题描述】:
在 python 中,值x 并不总是被限制为等于自身。也许最著名的例子是NaN:
>>> x = float("NaN")
>>> x == x
False
现在考虑一个只有一个项目的列表。我们可以认为两个这样的列表是equal,如果且只有它们包含的项目是equal。例如:
>>> ["hello"] == ["hello"]
True
但NaN 似乎并非如此:
>>> x = float("NaN")
>>> x == x
False
>>> [x] == [x]
True
所以这些“不相等”的项目列表是“相等的”。但只是有时……特别是:
- 由
NaN的相同实例组成的两个列表被认为是相等的;而 - 由
NaN的不同实例组成的两个单独的列表不相等
观察:
>>> x = float("NaN")
>>> [x] == [x]
True
>>> [x] == [float("NaN")]
False
这种一般行为也适用于其他集合类型,例如元组和集合。这有什么好的理由吗?
【问题讨论】:
-
如果您想要与不相等的 NaN 进行比较,您可以使用 NumPy,它会这样认为:
(np.array(a) == np.array(b)).all()将返回 False 如果有任何 NaN .
标签: python