gpt4 book ai didi

python - 为什么在 numpy `nan == nan` 中为 False 而 [nan] 中的 nan 为 True?

转载 作者:IT老高 更新时间:2023-10-28 21:58:31 26 4
gpt4 key购买 nike

虽然问题的第一部分(在标题中)之前已经回答过几次(即 Why is NaN not equal to NaN? ),但我不明白为什么第二部分会以它的方式工作(受此启发问题 How to Check list containing NaN )?

即:

>> nan == nan
False

>> nan in [nan]
True

考虑到@DSM 的答案的问题的解释性附录。那么,为什么 float("nan") 的行为与 nan 不同?它不应该再次评估为简单的 nan 吗?为什么解释器会这样?

>> x = float("nan")
>> y = nan
>> x
nan
>> y
nan
>> x is nan, x is float("nan"), y is nan
(False, False, True)

基本上,它在第一种情况下引用相同的通用 nan,但在第二种情况下创建单独的对象:

>> nans = [nan for i in range(2)]
>> map(id, nans)
[190459300, 190459300]
>> nans = [float("nan") for i in range(2)]
>> map(id, nans)
[190459300, 190459301]

最佳答案

nan 不等于 nannan 定义的一部分,所以这部分很简单。

至于 nan in [nan] 为 True,这是因为在列表中包含相等性之前测试了身份。您正在比较相同的两个对象。

如果你用两个 不同的 nan 尝试同样的事情,你会得到 False:

>>> nans = [float("nan") for i in range(2)]
>>> map(id, nans)
[190459300, 190459284]
>>> nans
[nan, nan]
>>> nans[0] is nans[1]
False
>>> nans[0] in nans
True
>>> nans[0] in nans[1:]
False

您的附录与 nan 没有太大关系,这就是 Python 的工作原理。一旦您了解 float("nan") 没有义务返回一些 nan 单例,并且 y = x 不会复制 x 而是将名称 y 绑定(bind)到由 x 命名的对象,没有什么可获取的。

关于python - 为什么在 numpy `nan == nan` 中为 False 而 [nan] 中的 nan 为 True?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20320022/

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