You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:为何float('nan') == float('nan')返回False?

为什么float('nan') == float('nan')返回False,且NaN不在包含它的列表里?

这问题太典型了,其实根源是IEEE 754浮点标准对NaN的特殊定义,咱们一步步拆解:

1. 为什么NaN不等于它自己?

NaN(Not a Number)代表的是“无效的数值结果”——比如0除以0、负数开平方这类运算的产物。IEEE 754标准明确规定:NaN和任何值(包括它自己)的相等比较结果都是False。

举个直观的例子:

print(float('nan') == float('nan'))  # 输出: False

毕竟连“它是什么确定值”都没法定义,自然没法和任何东西(包括自己)划等号对吧?

2. 为什么foo in [bar, float('nan')]始终返回False?

Python里的in运算符检查列表成员时,本质是逐个用==比较列表元素和目标值。既然NaN和自己用==比都是False,那不管列表里有没有NaN,foo in ...的结果肯定是False。

比如:

foo = float('nan')
print(foo in [1, float('nan')])  # 输出: False

哪怕列表里明明白白有个NaN,也过不了==这一关。

那该怎么正确判断NaN?

别用==,用专门的判断工具:

  • 用math.isnan()精准判断单个值:
import math
foo = float('nan')
print(math.isnan(foo))  # 输出: True
  • 如果要检查列表里是否存在NaN,可以遍历列表逐个验证:
import math
my_list = [3.14, float('nan'), 2.718]
has_nan = any(math.isnan(x) for x in my_list)
print(has_nan)  # 输出: True

内容的提问来源于stack exchange,提问作者Tommy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:33:30