为什么与nan相比会产生False(Python)?



在这里,我有以下内容:

>>> import numpy as np
>>> q = np.nan
>>> q == np.nan
False
>>> q is np.nan
True
>>> q in (np.nan, )
True

那么,问题来了:为什么楠不等于楠,而是楠? (独一无二)为什么"in"返回 True? 我似乎无法追踪 nan 的实现。 它把我引向了 C:\Python33\lib\site-packagesumpy\core\umath.pyd (row NAN = nan),但从那里没有可追溯的方法来找出 nan 到底是什么。

numpy的创建者认为,大多数与nan的比较,包括==,应该产生False,这是最有意义的。您可以通过为对象定义__eq__(self, other)方法来在 Python 中执行此操作。选择这种行为只是因为它对于各种目的最有用。毕竟,一个条目具有缺失值,而另一个条目也具有缺失值这一事实并不意味着这两个条目相等。它只是意味着您不知道它们是否相等,因此最好不要将它们视为相等(例如,当您通过配对相应的行将两个表连接在一起时)。

另一方面,is是一个 Python 关键字,不能被numpy覆盖。它测试两个对象是否是同一事物。nannan是同一对象。无论如何,这也是有用的行为,因为通常您希望例如删除所有没有值的条目,您可以使用is not nan来实现。

nan in (nan,)返回 True,因为您可能知道,(nan,)是一个只有一个元素的元组,nan,当 Python 检查对象是否in元组时,它会检查该对象是否isor==元组中的任何对象。

最新更新