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

Python列表相邻重复元素移除函数未生效,求原因分析

移除列表相邻重复元素的函数问题分析

我尝试编写一个函数来移除列表中的相邻重复元素,例如输入列表[1,2,3,3,4]应返回[1,2,3,4]。以下是我的代码:

def remove_adjacent(nums):
  for i in nums:
    if i == nums[nums.index(i)-1]:
        nums = nums.remove(i)
  return nums  

但运行后函数返回的仍是原列表,未做任何修改,恳请告知该现象的原因。

问题根源

  • index() 方法的误用:nums.index(i) 返回的是元素i在列表中第一次出现的位置,不是当前循环到的元素的索引。比如循环到第二个3时,index(3)返回的是索引2,此时nums[index(i)-1]是nums[1]即2,和当前的3不相等,判断条件永远不会触发。
  • remove() 方法的错误赋值:nums.remove(i) 会移除列表中第一个匹配的i,但这个方法的返回值是None,不是修改后的列表。如果条件触发,你会把nums赋值为None,后续循环直接失效——不过在你的代码里因为前面的条件没触发,这步根本没执行。
  • 边界条件未处理:当循环到列表第一个元素时,nums.index(i)-1等于-1,取到的是列表最后一个元素,完全违背了“判断相邻元素”的逻辑,第一个元素本就没有前一个元素,应该跳过判断。

修正后的实现

不需要在原列表上修改,直接构建新列表更安全:

def remove_adjacent(nums):
    if not nums:
        return []
    # 初始化结果列表,加入第一个元素
    result = [nums[0]]
    # 从第二个元素开始遍历
    for num in nums[1:]:
        # 只加入和最后一个元素不同的元素
        if num != result[-1]:
            result.append(num)
    return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:32:01