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

如何按指定规则对含数字和时间单位的字符串列表实现最优排序

Python 时间字符串排序最佳实践

核心实现方案

你可以直接利用Python内置的sorted函数自定义排序key实现需求,无需手动拆分列表再拼接,代码简洁且性能更优:

my_list = ['1h-data', '1m-data', '15m-data' , '4h-data', '50s-data']
# 定义单位优先级映射,权重越小排序越靠前
unit_priority = {'s': 1, 'm': 2, 'h': 3}

def sort_key(item):
    time_part = item.split('-')[0]
    # 提取数字和单位
    num = int(time_part[:-1])
    unit = time_part[-1]
    # 按「单位优先级→数字大小」的顺序返回排序元组
    return (unit_priority[unit], num)

# 生成排序后的新列表
my_ordered_list = sorted(my_list, key=sort_key)
# 如果不需要保留原列表,可直接原地排序更省内存
# my_list.sort(key=sort_key)

print(my_ordered_list)
# 输出结果:['50s-data', '1m-data', '15m-data', '1h-data', '4h-data']

方案优势

  • 逻辑简洁:直接复用Python内置的元组排序规则,无需手动拆分、排序、拼接列表,易维护
  • 性能更优:单位优先级用字典映射,查询效率为O(1),对比原本用列表index()查找优先级的O(n)效率,数据量越大优势越明显
  • 扩展性强:后续需要新增时间单位(比如d代表天)时,只需要在unit_priority中新增对应键值对即可,无需修改排序逻辑

精简写法(一次性场景)

如果是单次排序不需要复用排序逻辑,可以直接用lambda表达式简化代码:

unit_priority = {'s': 1, 'm': 2, 'h': 3}
my_ordered_list = sorted(my_list, key=lambda x: (unit_priority[x.split('-')[0][-1]], int(x.split('-')[0][:-1])))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:45:01