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

2024-02-21

在这里,我有以下内容:

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

那么,问题是:为什么nan不等于nan,而是nan? (唯一)为什么 'in' 返回 True? 我似乎无法追踪 nan 的实现。它引导我到 C:\Python33\lib\site-packages\numpy\core\umath.pyd (行 NAN = nan),但从那里没有可追踪的方法来找出 nan 到底是什么。


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么与 nan 比较会产生 False (Python)? 的相关文章

随机推荐