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

为何移除长度判断后快速排序代码报错?求原因解释

快速排序移除长度判断后触发IndexError的原因

问题场景

移除快速排序函数中的if length <= 1: return lst长度判断逻辑后,运行代码时触发IndexError: pop from empty list错误。

原代码(含长度判断)

lst = [5,3,8,6,7,2]

def quick_sort(lst):
    length = len(lst)
    if length <= 1:
        return lst
    else:
        a = lst.pop()

    grt_lst = []
    sml_lst = []

    for i in lst:
        if i > a:
            grt_lst.append(i)
        else:
            sml_lst.append(i)

    return quick_sort(sml_lst) + [a] + quick_sort(grt_lst)

print(quick_sort(lst))

错误信息

File "c:\Users\dueth\OneDrive\Documents\vs code\main.py", line 45, in quick_sort
    a = lst.pop()
        ^^^^^^^^^
IndexError: pop from empty list

错误原因

快速排序是递归实现的算法,核心逻辑是不断将列表拆分为更小的子列表递归处理:

  • 保留if length <= 1: return lst时,递归到空列表或仅含单个元素的列表会直接返回,终止当前分支的递归,避免后续无效操作。
  • 移除这段判断后,递归会无限制深入:当子列表被拆分至空列表时,函数仍会执行a = lst.pop(),而空列表无法执行pop()操作,直接触发IndexError。

举个具体执行场景:原列表拆分过程中必然会产生空的sml_lst或grt_lst,递归调用quick_sort(空列表)时,没有长度判断拦截,直接执行pop()操作,此时列表为空,自然触发报错。

内容的提问来源于stack exchange,提问作者MavericK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:34:51