Python实现字符串相邻去重报索引越界,输入rooobert得robert如何解决
报错根因
- 你初始化循环范围
range(0, len(n)-1)时,是基于输入字符串的初始长度计算的固定值,但循环过程中调用n.remove()会不断缩短列表的实际长度,后续循环的索引i超过当前列表的最大索引时就会触发越界错误 - 额外逻辑问题:
list.remove()会删除列表中第一个匹配的元素,即使解决越界问题,遇到非连续重复字符、连续重复次数大于2的场景时也无法得到正确结果
修复方案
方案1:新增结果列表存储(逻辑最直观,无索引问题)
遍历原字符串,逐个判断是否和结果列表最后一位重复,不重复才存入:
n = input() res = [] for char in n: if res and res[-1] == char: continue res.append(char) print(''.join(res))
输入rooobert时,输出为预期的robert。
方案2:在原列表上修改(适合需要操作原列表的场景)
用while循环动态判断列表长度,匹配到重复字符时不递增索引,避免漏判多次重复的场景:
n = list(input()) i = 0 while i < len(n) - 1: if n[i] == n[i+1]: del n[i] else: i += 1 print(''.join(n))
内容的提问来源于stack exchange,提问作者Mohamad Sh
相关产品推荐
相关产品推荐

