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

Python中含NaN的列表使用sorted排序结果异常原因咨询

问题原因与解决方案

为什么会出现异常排序结果?

Python内置的sorted()函数处理包含np.nan的列表时,会因为np.nan的特殊比较逻辑出问题:np.nan和任何数值比较都会返回False。比如np.nan < -1是False,-1 < np.nan也是False,这让排序算法无法正确判断元素间的顺序,导致不同列表的排序结果看起来矛盾。

让NaN前置的解决方案

方法1:自定义sorted的key函数

通过lambda函数把np.nan映射成比所有数值都小的-np.inf,排序时NaN会自动排在最前面:

import numpy as np

lst = [1,2,np.nan, -1]
# 实现NaN前置的排序
sorted_lst = sorted(lst, key=lambda x: -np.inf if np.isnan(x) else x)
print(sorted_lst)  # 输出: [nan, -1, 1, 2]

方法2:使用numpy的排序工具

如果用numpy数组处理,可通过掩码分离NaN和非NaN元素,排序后拼接实现NaN前置:

import numpy as np

arr = np.array([1,2,np.nan, -1])
# 分离NaN和非NaN部分
nan_part = arr[np.isnan(arr)]
sorted_non_nan = np.sort(arr[~np.isnan(arr)])
# 拼接得到结果
result = np.concatenate([nan_part, sorted_non_nan])
print(result)  # 输出: [nan -1.  1.  2.]

如果需要NaN后置,只需把key里的-np.inf换成np.inf,或者直接用numpy默认的np.sort()(默认将NaN放在末尾)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:59:51