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

Python列表排序:将NaN、Inf移至末尾并反转有效数字

解决Python列表排序时nan/inf的处理问题

要实现有效数字降序、nan和inf放在末尾的需求,有两种简洁的实现方式:

方法一:拆分列表后拼接

先把列表分成有效数字和**非有效数字(nan/inf)**两部分,对有效数字降序排序后再拼接非有效部分:

import math

n = [13, 4, 52, 3.1, float('nan'), float('inf'), 8.2]
# 筛选出所有有限的有效数字(排除nan和inf)
valid_numbers = [num for num in n if math.isfinite(num)]
# 筛选出nan和inf
non_valid = [num for num in n if not math.isfinite(num)]
# 有效数字降序排序 + 拼接非有效部分
sorted_result = sorted(valid_numbers, reverse=True) + non_valid
print(sorted_result)
# 输出: [52, 13, 8.2, 4, 3.1, nan, inf]

math.isfinite()函数会返回True当且仅当输入是有限数(整数或普通浮点数,不是nan也不是inf),用它可以精准拆分列表。

方法二:使用sorted的key参数一次完成

不需要拆分列表,通过自定义排序key让有效数字排在前面并降序,nan/inf排在后面:

import math

n = [13, 4, 52, 3.1, float('nan'), float('inf'), 8.2]
sorted_result = sorted(n, key=lambda x: (not math.isfinite(x), -x) if math.isfinite(x) else (True, 0))
print(sorted_result)
# 输出: [52, 13, 8.2, 4, 3.1, nan, inf]

key参数逻辑:

  • 对于有效数字:key是(False, -x),False确保它们排在所有True的前面(非有效数字的key第一个元素是True),-x让sorted默认的升序排序变成原数字的降序。
  • 对于nan/inf:key是(True, 0),True让它们排在末尾,第二个元素0不影响彼此的顺序(保持原列表中的相对顺序)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:35:25