使用for循环合并两个有序列表时丢失最后一个元素的问题
问题分析与修复
你的代码有两个核心问题导致缺失最后一个元素:
循环次数不足
总元素数是3+4=7,但你计算的total_range = 7-1=6,range(total_range)只会循环6次,自然只能加入6个元素,漏掉了最后一个。未处理单列表遍历完成后的剩余元素
当其中一个列表的指针已经走到最后一位时,原代码没有直接把另一个列表剩下的元素全部追加进去,反而还在继续比较两个列表的最后一个元素,导致循环结束后仍有元素残留。
修复后的代码
list1=[1,2,4] list2=[1,3,4,6] def mergeTwoLists(list1: list, list2:list) -> list: l = 0 r = 0 len1 = len(list1) len2 = len(list2) merger = [] # 循环总元素数次数,确保所有元素都能被处理 for _ in range(len1 + len2): # 先判断是否其中一个列表已经遍历完 if l >= len1: merger.append(list2[r]) r += 1 elif r >= len2: merger.append(list1[l]) l += 1 # 两个列表都还有元素时,比较大小后加入 elif list1[l] <= list2[r]: merger.append(list1[l]) l += 1 else: merger.append(list2[r]) r += 1 return merger print(mergeTwoLists(list1, list2)) # 输出:[1,1,2,3,4,4,6]
关键调整说明
- 直接用
len1 + len2作为循环次数,保证每个元素都有机会被加入结果列表 - 每次循环先检查是否有列表已经遍历完成,如果是,直接追加另一个列表的剩余元素
- 用
append()替代insert(i, ...),因为我们是按顺序添加,append效率更高,也不需要依赖循环索引i
内容的提问来源于stack exchange,提问作者Mike Curtis
相关产品推荐
相关产品推荐

