You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:55:22