Python如何对包含数值和字母数字混合值的列表按要求排序
Python混合类型列表排序实现方法
你可以通过自定义 sorted 函数的排序键实现需求,核心逻辑是把所有元素统一转换为「数值前缀+后缀字符串」的元组进行比较,具体代码如下:
import re def get_sort_key(item): # 处理纯数值类型 if isinstance(item, (int, float)): return (item, "") # 拆分字符串的数字前缀和后缀 match_res = re.match(r"^(\d+)(.*)$", str(item)) num_part = int(match_res.group(1)) suffix_part = match_res.group(2) return (num_part, suffix_part) l_beg = ['2a', 1, 3, '2b'] l_end = sorted(l_beg, key=get_sort_key) print(l_end) # 输出:[1, '2a', '2b', 3]
排序逻辑说明
- 元组比较会优先比对第一个元素,所以数值部分的排序会优先执行,保证
1 < 2 < 3的整体顺序 - 数值部分相同时会比对第二个元素:空字符串的排序优先级高于所有非空字符串,因此同数值的纯数值元素会排在字符串元素前面;同数值前缀的字符串会直接按后缀的自然顺序排序,因此
'2a'会排在'2b'前面。
内容的提问来源于stack exchange,提问作者Energyguy
相关产品推荐
相关产品推荐

