如何在Python中实现先按长度再按字母序的自定义排序算法?
问题描述
需要实现一个排序函数,对字符串列表先按长度升序排序,长度相同时按字母序升序排序。示例输入:
['daring','adequate','bold','bait','cold','beautiful']
预期输出:
['bait','bold','cold','daring','adequate','beautiful']
现有仅支持字母序排序的快速排序代码如下:
def quick_sort(sequence): length = len(sequence) if length <=1: return sequence else: pivot = sequence.pop() items_greater = [] items_lower = [] for item in sequence: if item > pivot: items_greater.append(item) else: items_lower.append(item) return quick_sort(items_lower) + [pivot] + quick_sort(items_greater)
修改方案
核心是调整比较逻辑,利用Python元组按元素依次比较的特性:先对比字符串长度,长度相等时再对比字符串本身的字母序。只需修改判断条件,无需改动快速排序的分治框架。
修改后的代码:
def quick_sort(sequence): length = len(sequence) if length <= 1: return sequence else: pivot = sequence.pop() items_greater = [] items_lower = [] for item in sequence: # 先比较长度,长度相同则比较字符串字母序 if (len(item), item) > (len(pivot), pivot): items_greater.append(item) else: items_lower.append(item) return quick_sort(items_lower) + [pivot] + quick_sort(items_greater) # 测试示例 test_list = ['daring','adequate','bold','bait','cold','beautiful'] print(quick_sort(test_list)) # 输出: ['bait','bold','cold','daring','adequate','beautiful']
关键修改说明
- 将原判断条件
item > pivot替换为(len(item), item) > (len(pivot), pivot) - Python元组比较时会优先对比第一个元素(字符串长度),若相等则自动对比第二个元素(字符串本身),完美匹配"先长度后字母序"的排序需求
- 快速排序的核心分治逻辑完全保留,仅调整元素比较规则,保证了原算法的效率
内容的提问来源于stack exchange,提问作者Joydurn Yup
相关产品推荐
相关产品推荐

