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

Python中如何对字母数字混合字符串先按数值降序再按字母升序排序

自定义排序实现方案

核心思路是将每个字符串拆分为数值前缀和字母后缀两部分,利用Python sorted 函数支持自定义排序键的特性,构造符合规则的排序元组:

  • 第一优先级:数值部分降序,通过在排序键中传入负数的数值实现
  • 第二优先级:字母部分升序,直接传入后缀字符串即可

实现代码

import re

f = ['120d', '120a', '1080p', '1080a', '696p', '696z']
# 匹配前半部分数字、后半部分字母的正则
split_pattern = re.compile(r'^(\d+)([a-zA-Z]+)$')

def get_sort_key(s):
    match_res = split_pattern.match(s)
    num_part = int(match_res.group(1))
    suffix_part = match_res.group(2)
    return (-num_part, suffix_part)

result = sorted(f, key=get_sort_key)
print(result)

输出结果

['1080a', '1080p', '696p', '696z', '120a', '120d']

原理说明

Python 对元组类型的排序键会按位置依次比较:

  1. 先比较第一个元素-num_part,数值越大的字符串,其负数值越小,在默认升序排序中会排在更前的位置,实现数值降序的需求
  2. 当数值部分相同(即-num_part相等)时,会自动比较第二个元素suffix_part,字符串默认按ASCII码升序排列,正好满足字母部分升序的需求

如果你的字符串格式不固定(比如字母中也穿插数字),可以调整正则的匹配规则适配实际场景。


内容的提问来源于stack exchange,提问作者t.abraham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:36:03