You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python求助:删除字符串中term的第2、4、6…次出现项

问题分析与修正

原代码存在几个核心问题:

  • 错误地将原字符串按固定2字符长度分割,这会破坏term("aa")原本的出现位置逻辑,比如原字符串中连续三个"a"会被拆成"aa"和"a",导致漏判或误判。
  • 混淆了「term的出现次数」和「列表索引」,原代码用索引奇偶性判断是否删除,和题目要求的“删除第2、4、6…次出现的term”完全不符。
  • 在遍历列表时直接修改列表(remove操作),会导致索引错乱,后续元素前移后被跳过,逻辑不可靠。

正确实现思路

要实现删除第2、4、6…次出现的term,需要:

  1. 遍历原字符串,精准定位每一次term的出现位置。
  2. 统计term的出现次数,仅保留第1、3、5…次(奇数次)出现的内容,跳过偶数次的。
  3. 拼接处理后的字符,得到最终结果。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:48:19