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

如何基于子字符串对文件名列表排序,优化大文件处理效率

高效实现文件名分组排序的方案

你原来的代码效率低的核心原因是嵌套循环带来的O(n²)时间复杂度,每处理一个文件名都要遍历全列表匹配前缀,数据量大的时候开销会指数级上升。下面是两种高效实现方式,时间复杂度均为O(n log n),适合处理大体积文件:

方案1:直接自定义排序键(代码最简)

直接利用Python内置的sorted函数,指定排序规则为-分割后的第一部分前缀即可:

# lines 为读取到的所有文件名组成的列表
final_list = sorted(lines, key=lambda x: x.split("-")[0])

如果需要同前缀的文件也按后缀规则排序,可以把键改为元组,比如同前缀下按第二个片段排序:

final_list = sorted(lines, key=lambda x: (x.split("-")[0], x.split("-")[1]))

方案2:字典分组后合并(适合需要单独处理分组的场景)

如果后续需要对每个分组单独操作,可以先用字典做O(n)复杂度的分组,再排序前缀后合并结果:

from collections import defaultdict

group_map = defaultdict(list)
for file_name in lines:
    prefix = file_name.split("-")[0]
    group_map[prefix].append(file_name)

final_list = []
# 按前缀排序后依次合并分组内容
for prefix in sorted(group_map.keys()):
    # 同组内容需要排序的话可以改成 sorted(group_map[prefix])
    final_list.extend(group_map[prefix])

两种方案处理百万级别的文件名也能在秒级完成,远优于原写法的性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:39:03