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

Python检测列表相邻元素连续变化的代码输出异常排查

问题背景
  • 目标需求:提取列表内相邻连续元素发生变化位置的对应值:相邻两个元素值不相等时,将这两个元素都加入结果列表
  • 参考示例:输入序列为1 1 1 3 3 3 2时,预期输出为[1,3,3,2]:1变为3时加入1、3;3变为2时加入3、2
  • 故障表现:现有代码运行后仅返回[1,3],缺失3变化为2对应的[3,2]片段,无法得到预期输出

原有故障代码

for t in range(int(input())):
    n = int(input())
    a = list(map(int,input().split()))[:n]
    l=[]
    if a.count(a[0])==len(a):
        print("0")
    else:
        for i in a:
            if a[i] != a[i+1]:
                print(i)
                l.extend((a[i],a[i+1]))
        print(l)
故障原因
  • 循环逻辑完全错误:代码写的是for i in a,也就是i取的是列表里的元素值,不是元素下标。比如示例列表里的元素是1、3、2,循环时i只会取这三个值,用a[i]本质是拿元素值当下标去索引列表,完全不是在遍历相邻元素,自然会漏掉大部分变化点,甚至在元素值超过列表长度时直接报索引错误。
  • 边界逻辑缺失:就算改成遍历下标,直接取a[i+1]也会在遍历到最后一个元素时触发越界报错。
修正后实现
for t in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))[:n]
    res = []
    # 所有元素完全一致的特殊场景
    if len(set(a)) == 1:
        print(0)
        continue
    # 仅遍历到倒数第二个元素,避免i+1越界
    for i in range(len(a) - 1):
        if a[i] != a[i+1]:
            res.append(a[i])
            res.append(a[i+1])
    print(res)

测试输入1 1 1 3 3 3 2时,代码输出[1, 3, 3, 2],完全符合预期。

内容的提问来源于stack exchange,提问作者kushal hemanth 1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:54:21