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

Python如何对字母数字混合列表排序?以存储容量单位列表为例

如何用Python对带存储单位的列表排序?

嘿,这个需求太常见了!要实现你想要的排序,核心思路就是把每个带单位的字符串转换成实际的字节数,基于字节数排序就轻松搞定了。我给你一个简洁又靠谱的实现方案:

步骤1:定义单位转换映射

先搞个字典,把存储单位对应成字节数(这里用二进制换算,1KB=1024字节,要是你需要十进制的话改成1000就行):

unit_map = {
    'KB': 1024,
    'MB': 1024 ** 2,
    'GB': 1024 ** 3
}

步骤2:写个提取字节数的辅助函数

这个函数负责把列表里的元素(比如"300KB")拆成数字和单位,再算出对应的字节数:

import re

def get_bytes(size_str):
    # 用正则匹配数字和单位部分
    match = re.match(r'(\d+)([A-Za-z]+)', size_str)
    if not match:
        raise ValueError(f"无法识别的格式:{size_str}")
    # 提取数字和单位,单位转大写统一格式
    num = int(match.group(1))
    unit = match.group(2).upper()
    return num * unit_map[unit]

步骤3:用sorted函数完成排序

直接把这个辅助函数作为key参数传给sorted,就能按实际存储容量排序了:

lista = ["300KB", "12MB", "100KB", "1GB"]
sorted_list = sorted(lista, key=get_bytes)
print(sorted_list)  # 输出: ['100KB', '300KB', '12MB', '1GB']

小补充

要是你想原地修改原列表而不是生成新列表,用列表的sort方法就行:

lista.sort(key=get_bytes)

这个方案扩展性还很强,以后要加TB、PB这类单位,直接在unit_map里添个键值对就搞定啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:59