Python移除字符串超2次连续重复字符的函数失效问题排查
代码逻辑问题分析
你的代码存在三个核心逻辑错误,直接导致去重逻辑失效:
- 索引完全错位:循环遍历的是原始字符串
text的下标idx,但循环过程中会不断删除result列表内的元素,result长度会持续小于原始字符串长度,后续用原始idx做切片result[:idx]取到的内容,和你预期的「当前遍历位置之前的已保留字符」完全不匹配,计数结果从根源上就是错误的。 - 删除目标错误:
list.remove(char)的作用是删除列表中第一个匹配到的指定字符,并非删除当前遍历位置的字符。就算触发删除条件,删掉的也是列表里最早出现的对应字符,而非当前位置多余的重复项,属于删错了位置。 - 判断阈值时机错误:触发删除的条件是
count(char) > 2,也就是说字符累计出现3次才会触发删除。但遍历到第3次出现的该字符时,前面切片内该字符的计数刚好是2,不满足>2的判断条件,根本不会触发删除,等遍历到第4次同字符时才会进入判断,已经错过删除时机。
边遍历原始序列边修改目标列表长度的写法本身就很容易引入索引bug,完全不需要这么复杂。
修正后代码
直接从头构建结果列表即可,避开修改列表长度带来的索引问题,逻辑更清晰:
def remove_more_than_two_reps(text): result = [] for char in text: # 已保留的同字符数量小于2才追加,否则直接跳过 if result.count(char) < 2: result.append(char) return ''.join(result)
测试验证:
text = 'teeeexxxxt' result = remove_more_than_two_reps(text) print(result) # 输出:teexxt
完全符合预期结果。
内容的提问来源于stack exchange,提问作者mark1042
相关产品推荐
相关产品推荐

