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

Python如何对含字符串、整数的元组列表实现正确自定义排序

问题原因

当前排序结果不符合预期的核心原因是:你直接对第一个元素(字符串类型)按字典序排序,而数字形式的字符串的字典序和数值序逻辑不同。例如字符串'15'和'5'比较时,会逐字符对比ASCII码,首字符'1'的ASCII码小于'5',因此'15'会排在'5'前面,和期望的数值排序逻辑冲突。

解决方案

调整排序key的逻辑,对第一个元素做分支处理:

  1. 可转为整数的数字类字符串:转换为整数后按数值排序,排在非数字字符串之后
  2. 不可转为整数的符号类字符串:保留原字符串排序,排在最前面
  3. 第一个元素值相同时,按第二个元素(本身为整数,无需额外转换)排序

实现代码

def get_sort_key(item):
    s, num1, _ = item
    try:
        s_int = int(s)
        return (1, s_int, num1)
    except ValueError:
        return (0, s, num1)

array = [('$', 0, 0), ('3', 3, 3), ('7', 5, 6), ('15', 6, 9), ('5', 7, 11), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18), ('16', 11, 20)]
sorted_array = sorted(array, key=get_sort_key)
print(sorted_array)

输出结果

[('$', 0, 0), ('3', 3, 3), ('5', 7, 11), ('7', 5, 6), ('15', 6, 9), ('16', 11, 20), ('17', 8, 13), ('18', 9, 16), ('19', 10, 18)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:00