Python不使用sort/sorted函数按末尾数字排序字符串列表
实现方案
不用内置排序方法的话,选逻辑最容易理解的冒泡排序实现即可,核心分两步:
- 提取每个元素的排序依据:每个字符串都是
名称-数字格式,拆分字符串后取后缀转成整数作为排序键 - 手写排序逻辑,通过判断条件控制升序/降序
核心代码
def custom_sort(input_list, reverse=False): # 复制原列表避免修改原始数据 arr = input_list.copy() n = len(arr) for i in range(n): for j in range(0, n - i - 1): # 提取相邻两个元素的后缀数字 num_j = int(arr[j].split('-')[-1]) num_j1 = int(arr[j+1].split('-')[-1]) # 判断是否需要交换:reverse=False升序,reverse=True降序 swap_flag = num_j > num_j1 if not reverse else num_j < num_j1 if swap_flag: arr[j], arr[j+1] = arr[j+1], arr[j] return arr # 测试用例 list1 = ["aaditya-2", "rahul-9", "shubhangi-4"] # 升序输出 asc_res = custom_sort(list1, reverse=False) print(asc_res) # 输出: ['aaditya-2', 'shubhangi-4', 'rahul-9'] # 降序输出 desc_res = custom_sort(list1, reverse=True) print(desc_res) # 输出: ['rahul-9', 'shubhangi-4', 'aaditya-2']
说明
- 提取后缀后必须转成整数再比较,直接用字符串比较数字会出现
'10' < '2'的逻辑错误 - 如果要换其他排序算法(比如选择排序、插入排序),只需要替换双层循环里的排序逻辑,提取数字键的逻辑可以直接复用
- 只要字符串保持
任意前缀-数字的格式,这段代码都能正常处理,不用关心前缀内容是什么 - 代码里做了原列表拷贝,不会修改传入的原始列表数据
内容的提问来源于stack exchange,提问作者Aaditya Adyot
相关产品推荐
相关产品推荐

