【发布时间】:2019-01-08 08:42:19
【问题描述】:
Python 的集合与NaNs (here live) 相结合的行为令人费解(至少对我而言):
>>> float('nan') in {float('nan')} # example 1
False
>>> nan = float('nan') # example 2
>>> nan in {nan}
True
起初,我错误地认为这是==-operator 的行为,但显然情况并非如此,因为两种情况都按预期产生False (here live):
>>> float('nan') == float('nan')
False
>>> nan = float('nan')
>>> nan == nan
False
我主要对这种行为的原因感兴趣。但如果有办法确保行为一致,那也很高兴知道!
【问题讨论】:
-
Python 的容器假定
==是等价关系。如果不是这样,遏制的概念就会分崩离析。首先,您不应该将 NaN 放在集合中。 -
另见here。
标签: python python-3.x cpython python-internals