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

移除相邻重复数字的函数异常排查求助

问题排查与修复方案

我来帮你揪出这个问题的根源!你的思路方向是对的,但问题出在遍历列表副本的同时修改原列表,并且误用了remove()方法的行为。

问题分析

你用numList[:]创建了原列表的副本进行遍历,但每次调用numList.remove(i)时,它会移除原列表中第一个等于i的元素,而不是你当前遍历到的那个元素。这就导致了逻辑错位:
拿你的测试用例[2,2,4,4,2,2,5,5]来说:

  • 前两次遍历到的都是2,第二次执行numList.remove(2)时,会移除原列表的第一个2,此时原列表变成[2,4,4,2,2,5,5]。
  • 后续遍历到2时,remove()又会优先移除原列表开头的2,直接打乱了原本要保留的“非相邻重复”逻辑,最终得到错误的[4,2,2,5]。

修复方案

更安全清晰的做法是创建新列表来构建结果,而不是修改原列表。这样完全避免了元素匹配和索引错位的问题:

def removeAdjacentNumbers(numList):
    if not numList:  # 处理空列表的边界情况
        return []
    # 初始化结果列表,加入第一个元素
    result = [numList[0]]
    # 从第二个元素开始遍历原列表
    for num in numList[1:]:
        # 如果当前元素和结果列表最后一个元素不同,就加入结果
        if num != result[-1]:
            result.append(num)
    return result

def main():
    print(removeAdjacentNumbers([2,2,4,4,2,2,5,5]))  # 输出 [2,4,2,5]
if __name__== "__main__":
    main()

方案说明

  • 先判断列表是否为空,避免后续访问numList[0]时出现索引错误。
  • 用结果列表记录最终要返回的元素,每次只需要对比当前元素和结果列表的最后一个元素,不同就追加,完美实现“移除相邻重复”的逻辑。
  • 这个实现的时间复杂度是O(n),效率很高,也更容易理解和维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:37:33