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

如何不使用Python内置sort方法按字符串前4位排序字符串列表

问题背景

现有如下格式的字符串列表:

source_1 = [
    "2012 18  B",
    "2015 19  B",
    "2007 948 D",
    "2018 179 C"
]

需要自定义函数实现排序,要求不得调用Python内置的sort/sorted相关排序方法,排序规则为按每个字符串的前4个字符升序排列,期望输出结果如下:

source_1 = [
    "2007 948 D",
    "2012 18  B",
    "2015 19  B",
    "2018 179 C"
]

原有实现代码运行效率过低,需要优化方案。

原代码存在的问题

你之前写的实现有三个明显缺陷:

  • 时间复杂度太高,达到O(n³):每插入一个元素就执行一次双层循环的全量冒泡排序,数据量稍大时性能会极差
  • 返回结果不符合预期:代码只截取了字符串前10位存入结果列表,丢失了原字符串后半段内容,无法返回完整的原字符串排序结果
  • 逻辑冗余:排序规则只需要对比前4个字符,不需要额外截取字符串后6位、前10位的操作
高效实现方案

不使用内置排序方法的前提下,选择平均时间复杂度为O(nlogn)的快速排序实现即可,性能远高于原嵌套冒泡逻辑,可参考以下代码:

def sorttimestamp(arr):
    # 递归终止条件:列表长度不超过1时天然有序,直接返回
    if len(arr) <= 1:
        return arr
    # 取列表中间元素作为排序基准
    pivot = arr[len(arr) // 2]
    pivot_key = pivot[:4]
    left_part = []
    equal_part = []
    right_part = []
    # 遍历列表按对比key拆分到三个子列表
    for item in arr:
        current_key = item[:4]
        if current_key < pivot_key:
            left_part.append(item)
        elif current_key > pivot_key:
            right_part.append(item)
        else:
            equal_part.append(item)
    # 递归排序左右子列表后拼接得到最终结果
    return sorttimestamp(left_part) + equal_part + sorttimestamp(right_part)

调用测试:

source_1 = [
    "2012 18  B",
    "2015 19  B",
    "2007 948 D",
    "2018 179 C"
]
sorted_source = sorttimestamp(source_1)
print(sorted_source)

运行输出和预期完全一致:

['2007 948 D', '2012 18  B', '2015 19  B', '2018 179 C']
方案说明
  • 基于快速排序思想实现,平均时间复杂度O(nlogn),相比原实现的O(n³)性能提升非常明显,处理万级以上数据量也不会有明显延迟
  • 全程保留原字符串完整内容,不会出现内容截断丢失的问题
  • 对比时仅取每个字符串前4个字符作为排序依据,完全匹配规则要求
  • 逻辑简洁,没有冗余的字符串截取、无效循环操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:42:19