纯Python实现列表连续重复元素提取:修复代码缺陷需求
修复连续重复元素提取问题(符合指定限制)
问题描述
需求:在不使用任何外部库,且不使用any、map或zip函数的前提下,实现从列表中提取连续重复元素至新列表的功能。每个连续重复的元素块(长度≥2)仅需在结果中保留一个对应元素。
- 输入示例:
lst = [1,1,1,2,2,3,4,1,2,2,2,3,3,1,1,1,1,1] - 期望输出:
repeated_num = [1,2,2,3,1]
原代码缺陷:每次检测到相邻元素相等就直接添加,导致连续n个相同元素会被重复添加n-1次(比如[2,2,2]会输出[2,2]),不符合需求。
修复方案
核心思路是通过一个标记变量避免重复记录同一个连续重复块:
- 用
added布尔变量标记当前连续重复块的元素是否已加入结果 - 相邻元素相等时,仅在未标记的情况下添加元素并标记
- 相邻元素不同时,重置标记以检测下一个可能的连续块
修复后代码
# 处理输入:逗号分隔字符串转整数列表(不使用map) input_parts = input().split(',') lst = [] for part in input_parts: lst.append(int(part)) repeated_num = [] added = False # 标记当前连续块是否已加入结果 for i in range(len(lst) - 1): current = lst[i] next_val = lst[i+1] if current == next_val: if not added: repeated_num.append(current) added = True else: # 相邻元素不同,重置标记准备下一轮检测 added = False print(repeated_num)
测试验证
输入:1,1,1,2,2,3,4,1,2,2,2,3,3,1,1,1,1,1
输出:[1, 2, 2, 3, 1],完全符合期望结果。
内容的提问来源于stack exchange,提问作者Programming Noob
相关产品推荐
相关产品推荐

