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

如何在Python中将两个列表合并为有序数组?解决代码报错及实现问题

解决合并有序列表问题及缩进错误

先修复缩进错误

你遇到的TabError是因为代码混用了制表符(Tab)和空格作为缩进。Python对缩进要求严格,必须统一使用一种缩进方式,建议全程用4个空格作为缩进单位,把代码里的制表符全部替换成空格即可解决该报错。

正确实现合并为有序列表的方案

你的原代码逻辑完全不符合需求,下面分两种场景给出正确实现:

场景1:输入的两个列表本身已排序

如果arr1和arr2是升序排列的,用双指针法实现高效合并(时间复杂度O(n+m)):

def MergeSortedArray(arr1, arr2):
    i = j = 0
    merged = []
    # 双指针遍历,每次取较小的元素加入结果
    while i < len(arr1) and j < len(arr2):
        if arr1[i] < arr2[j]:
            merged.append(arr1[i])
            i += 1
        else:
            merged.append(arr2[j])
            j += 1
    # 加入剩余未遍历完的元素
    merged.extend(arr1[i:])
    merged.extend(arr2[j:])
    return merged

arr1 = [3,5,6,8]
arr2 = [1,2,7,9]  # 修正为已排序的列表
print(MergeSortedArray(arr1, arr2))  # 输出: [1, 2, 3, 5, 6, 7, 8, 9]

场景2:输入的列表未排序,合并后排序

如果输入的列表本身无序,直接合并后排序即可(实现简单,时间复杂度O((n+m)log(n+m))):

def MergeSortedArray(arr1, arr2):
    merged = arr1 + arr2
    merged.sort()
    return merged

arr1 = [3,5,6,8]
arr2 = [1,2,9,7]
print(MergeSortedArray(arr1, arr2))  # 输出: [1, 2, 3, 5, 6, 7, 8, 9]

原代码的问题说明

  • zip(i,j)用法错误:i和j是循环索引值,不是列表元素,zip需要传入可迭代对象(如列表)而非单个整数。
  • 嵌套循环逻辑完全不符合合并有序列表的需求,最终返回的a只是最后一次循环生成的无效zip对象,无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:01:12