我曾经认为 Python 中的
或
in
运算符是通过相等性检查 ==
来检查某个集合中是否存在元素,因此 element in some_list
等价于 any(x == element for x in some_list)
。例如:True in [1, 2, 3]
# True because True == 1
或
1 in [1., 2., 3.]
# also True because 1 == 1.
然而,众所周知NaN
不等于它自己。因此,我预期float("NaN") in [float("NaN")]
应该是False
。实际上确实是False
。
然而,如果我们使用numpy.nan
代替float("NaN")
,情况就大不相同:
import numpy as np
np.nan in [np.nan, 1, 2]
# True
但是,np.nan == np.nan
仍然返回False
!
这怎么可能?np.nan
和float("NaN")
有什么区别?in
如何处理np.nan
?
nan = float("NaN"); nan in [nan]
会返回True
。谢谢! - Ilya V. Schurovx in s
,如果 s 中有一个项目等于 x,则返回 True,否则返回 False。看起来像是一个 bug - 是文档还是实现有待商榷。考虑到后果,最好只记录in
运算符实际执行的操作。 - Voonan
是唯一会导致问题的东西,所以显然它并不被认为是足够重要的。请参阅 PEP 754 的拒绝通知 该 PEP 已被拒绝。在开放了四年后,它未能产生足够的社区兴趣。 - Paul Panzer