如何在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
相关产品推荐
相关产品推荐

