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

使用for循环合并两个有序列表时丢失最后一个元素的问题

问题分析与修复

你的代码有两个核心问题导致缺失最后一个元素:

  1. 循环次数不足
    总元素数是3+4=7,但你计算的total_range = 7-1=6,range(total_range)只会循环6次,自然只能加入6个元素,漏掉了最后一个。

  2. 未处理单列表遍历完成后的剩余元素
    当其中一个列表的指针已经走到最后一位时,原代码没有直接把另一个列表剩下的元素全部追加进去,反而还在继续比较两个列表的最后一个元素,导致循环结束后仍有元素残留。


修复后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:41:12