合并排序算法报错求助: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
相关产品推荐
相关产品推荐

