gpt4 book ai didi

python - 比较包含 NaN 的列表

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:01 26 4
gpt4 key购买 nike

我正在尝试比较两个不同的列表以查看它们是否相等,并且打算删除 NaN,结果发现我的列表比较仍然有效,尽管 NaN == NaN -> False .

有人可以解释为什么以下评估 TrueFalse,因为我发现这种行为出乎意料。谢谢,

我已阅读以下内容,但似乎无法解决问题:

(Python 2.7.3,numpy-1.9.2)

我在末尾用 * 标记了令人惊讶的评估

>>> nan = np.nan
>>> [1,2,3]==[3]
False
>>> [1,2,3]==[1,2,3]
True
>>> [1,2,nan]==[1,2,nan]
True ***
>>> nan == nan
False
>>> [nan] == [nan]
True ***
>>> [nan, nan] == [nan for i in range(2)]
True ***
>>> [nan, nan] == [float(nan) for i in range(2)]
True ***
>>> float(nan) is (float(nan) + 1)
False
>>> float(nan) is float(nan)
True ***

最佳答案

要了解这里发生了什么,只需将 nan = np.nan 替换为 foo = float('nan'),您将得到完全相同的结果,为什么?

>>> foo = float('nan')
>>> foo is foo # This is obviously True!
True
>>> foo == foo # This is False per the standard (nan != nan).
False
>>> bar = float('nan') # foo and bar are two different objects.
>>> foo is bar
False
>>> foo is float(foo) # "Tricky", but float(x) is x if type(x) == float.
True

现在认为 numpy.nan 只是一个包含 float('nan') 的变量名。

现在为什么 [nan] == [nan] 只是因为 list 比较首先测试项目之间的身份相等,然后再进行值相等,将其视为:

def equals(l1, l2):
for u, v in zip(l1, l2):
if u is not v and u != v:
return False
return True

关于python - 比较包含 NaN 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com