如何按末尾字母优先、前置数字次之的规则排序字母数字列表?
自定义字母数字列表排序实现
问题描述
我有一个字母数字列表:
['00A', '01B', '05A', '00A', '23C', '00B']
需要按优先按元素末尾字母排序,再按前置数字排序的规则排序,期望得到结果:
['00A', '00A', '05A', '00B', '01B', '23C']
尝试过以下排序代码:
sorted(a, key = lambda x: (isinstance(x, str), x))
但返回的结果不符合需求:
['00A', '00A', '00B', '01B', '05A', '23C']
解决方案
要实现指定的排序规则,需要自定义排序的key函数,让排序逻辑先以元素末尾的字母为第一优先级,再以前置数字的数值大小为第二优先级。
正确代码示例
a = ['00A', '01B', '05A', '00A', '23C', '00B'] sorted_list = sorted(a, key=lambda x: (x[-1], int(x[:-1]))) print(sorted_list)
输出结果
['00A', '00A', '05A', '00B', '01B', '23C']
逻辑说明
x[-1]:提取每个元素的最后一个字符(字母部分),作为第一排序依据,确保所有末尾字母相同的元素归为一组。int(x[:-1]):提取元素除最后一位外的子串,转换为整数类型后作为第二排序依据,这样数字部分会按数值大小排序,而非字符串字典序(避免'05'在'00'之后的问题)。
内容的提问来源于stack exchange,提问作者Rohan Nayani
相关产品推荐
相关产品推荐

