Python中如何对包含数字的字符串列表按数值顺序正确排序
排序实现方案
你需要的是自然语义排序,默认字符串字典序排序会把'10'排在'2'前面,因为字符'0'的ASCII码小于'2',所以需要自定义排序规则,提取字符串中的数字作为排序依据。
默认无规则排序的结果为:
['Number 1', 'Number 10', 'Number 11', 'Number 2'],和预期不符。
Python 实现代码
简易版(适配你给出的固定字符串格式)
通过字符串拆分提取末尾数字作为排序key:
original_list = ['Number 10', 'Number 11', 'Number 1', 'Number 2'] original_list.sort(key=lambda item: int(item.split()[-1])) print(original_list) # 输出:['Number 1', 'Number 2', 'Number 10', 'Number 11']
通用版(适配字符串格式不固定的场景)
用正则提取字符串中第一段数字作为排序key:
import re original_list = ['Number 10', 'Number 11', 'Number 1', 'Number 2'] original_list.sort(key=lambda item: int(re.search(r'\d+', item).group()))
其他编程语言通用逻辑
所有语言实现该需求的核心逻辑完全一致:
- 遍历列表每个元素,提取出其中的数字部分
- 将提取到的数字转为数值类型(禁止用字符串类型比较)作为排序权重
- 按照权重对原列表进行排序即可得到预期结果
内容的提问来源于stack exchange,提问作者mlghacker xX
相关产品推荐
相关产品推荐

