为何移除长度判断后快速排序代码报错?求原因解释
快速排序移除长度判断后触发
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
相关产品推荐
相关产品推荐

