如何基于字符串第二段的数字降序排序列表,无数字项前置?
字符串列表按指定规则排序实现
给定待排序的字符串列表:
["dakdmwk 2", "fwewk 1", "fmewkfmwek 4", "oopap 3", "fekamkdflew fnewjke"]
排序规则:
- 不含数字的字符串排在最前端
- 包含数字的字符串,按字符串中的数字值降序排列
实现代码(Python)
def sort_strings(lst): def get_sort_key(s): # 遍历拆分后的字符串片段,提取数字 for part in s.split(): if part.isdigit(): # 用负数字实现降序,0作为第一键值确保排在无数字项之后 return (0, -int(part)) # 无数字项返回(-1,),优先级高于有数字项 return (-1, ) return sorted(lst, key=get_sort_key) # 测试示例 original_list = ["dakdmwk 2", "fwewk 1", "fmewkfmwek 4", "oopap 3", "fekamkdflew fnewjke"] sorted_result = sort_strings(original_list) print(sorted_result)
代码说明
- 自定义
get_sort_key函数生成排序键:- 对每个字符串拆分后检查是否存在数字片段,若存在则返回
(0, -数字值),负号让数字大的项排在前面,0作为第一键值保证有数字项在无数字项之后 - 无数字的字符串返回
(-1,),由于-1小于0,会被sorted优先排在最前面
- 对每个字符串拆分后检查是否存在数字片段,若存在则返回
- 调用Python内置的
sorted()函数,传入自定义键即可完成排序
运行结果
['fekamkdflew fnewjke', 'fmewkfmwek 4', 'oopap 3', 'dakdmwk 2', 'fwewk 1']
内容的提问来源于stack exchange,提问作者MZr
相关产品推荐
相关产品推荐

