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

合并排序算法报错求助:int与list无法比较的TypeError问题

合并排序(Merge Sort)类型错误修复方案

你遇到的TypeError: '<=' not supported between instances of 'int' and 'list',根源出在合并剩余元素的步骤里:

你用了list.append(l_list[i:]),这个操作会把整个子列表作为单个元素塞进原列表,而不是把子列表里的整数逐个加进去。比如当l_list[i:]是[2]时,append会让原列表多一个[2]元素,而不是数字2。后续递归处理时,列表里既有整数又有列表,自然没法用<=做比较。

修复方法

把合并剩余元素的append()换成extend()就行——extend()会把可迭代对象的每个元素依次添加到列表中,正好符合需求:

list = [1, 3, 5, 6, 2]

def mergesort(list):
    n = len(list)

    if n <= 1:
      return

    mid_cut = n // 2
    l_list = list[:mid_cut]
    r_list = list[mid_cut:]
    mergesort(l_list)
    mergesort(r_list)

    i = 0
    j = 0
    list.clear()

    while i < len(l_list) and j < len(r_list):
      if l_list[i] <= r_list[j]:
        list.append(l_list[i])
        i += 1
      else:
        list.append(r_list[j])
        j += 1

    # 关键修改:用extend替代append
    if i < len(l_list):
      list.extend(l_list[i:])
    else:
      list.extend(r_list[j:])

mergesort(list)
print(list)  # 输出结果:[1, 2, 3, 5, 6]

替代方案

如果你不想用extend(),也可以用循环逐个添加剩余元素,效果完全一样:

# 替换原有的剩余元素合并代码
if i < len(l_list):
    for num in l_list[i:]:
        list.append(num)
else:
    for num in r_list[j:]:
        list.append(num)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:45:30