Python求助:删除字符串中term的第2、4、6…次出现项
问题分析与修正
原代码存在几个核心问题:
- 错误地将原字符串按固定2字符长度分割,这会破坏
term("aa")原本的出现位置逻辑,比如原字符串中连续三个"a"会被拆成"aa"和"a",导致漏判或误判。 - 混淆了「term的出现次数」和「列表索引」,原代码用索引奇偶性判断是否删除,和题目要求的“删除第2、4、6…次出现的term”完全不符。
- 在遍历列表时直接修改列表(
remove操作),会导致索引错乱,后续元素前移后被跳过,逻辑不可靠。
正确实现思路
要实现删除第2、4、6…次出现的term,需要:
- 遍历原字符串,精准定位每一次term的出现位置。
- 统计term的出现次数,仅保留第1、3、5…次(奇数次)出现的内容,跳过偶数次的。
- 拼接处理后的字符,得到最终结果。
修正后的代码
def delete_occurence(s, term): term_len = len(term) result = [] count = 0 i = 0 while i <= len(s) - term_len: if s[i:i+term_len] == term: count += 1 # 只保留奇数次出现的term if count % 2 != 0: result.append(term) # 跳过当前term的长度,避免重复匹配 i += term_len else: # 不匹配则添加当前字符,指针后移一位 result.append(s[i]) i += 1 # 处理字符串末尾剩余的不足term长度的字符 result.append(s[i:]) print(''.join(result)) delete_occurence("aabcdaaaxyaa11aa2", "aa")
代码说明
- 用
while循环遍历字符串,避免因列表修改导致的索引问题。 - 每次匹配到term时,计数加1,仅当计数为奇数时将term加入结果。
- 匹配到term后直接跳过整个term长度,防止重复匹配同一位置的字符。
- 最后拼接字符串末尾剩余的字符,确保没有遗漏。
运行上述代码,输出结果为:aabcdaxyaa112,符合预期。
内容的提问来源于stack exchange,提问作者VickyR
相关产品推荐
相关产品推荐

