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

Python不使用sort/sorted函数按末尾数字排序字符串列表

实现方案

不用内置排序方法的话,选逻辑最容易理解的冒泡排序实现即可,核心分两步:

  1. 提取每个元素的排序依据:每个字符串都是名称-数字格式,拆分字符串后取后缀转成整数作为排序键
  2. 手写排序逻辑,通过判断条件控制升序/降序

核心代码

def custom_sort(input_list, reverse=False):
    # 复制原列表避免修改原始数据
    arr = input_list.copy()
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            # 提取相邻两个元素的后缀数字
            num_j = int(arr[j].split('-')[-1])
            num_j1 = int(arr[j+1].split('-')[-1])
            # 判断是否需要交换:reverse=False升序,reverse=True降序
            swap_flag = num_j > num_j1 if not reverse else num_j < num_j1
            if swap_flag:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

# 测试用例
list1 = ["aaditya-2", "rahul-9", "shubhangi-4"]
# 升序输出
asc_res = custom_sort(list1, reverse=False)
print(asc_res)  # 输出: ['aaditya-2', 'shubhangi-4', 'rahul-9']
# 降序输出
desc_res = custom_sort(list1, reverse=True)
print(desc_res) # 输出: ['rahul-9', 'shubhangi-4', 'aaditya-2']

说明

  • 提取后缀后必须转成整数再比较,直接用字符串比较数字会出现'10' < '2'的逻辑错误
  • 如果要换其他排序算法(比如选择排序、插入排序),只需要替换双层循环里的排序逻辑,提取数字键的逻辑可以直接复用
  • 只要字符串保持任意前缀-数字的格式,这段代码都能正常处理,不用关心前缀内容是什么
  • 代码里做了原列表拷贝,不会修改传入的原始列表数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:15:47