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
相关产品推荐
相关产品推荐

