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

Simple DNA pattern matching:为未匹配模式添加提示的实现方法

多模式匹配新增未匹配提示实现方案

核心逻辑位置说明

判断单个模式是否未匹配的逻辑,必须放在单个pattern对应的内层滑动窗口遍历结束之后、开始遍历下一个pattern之前:

  • 不能放在内层匹配循环内部:不然只要某一个位置不匹配就会误报,还没遍历完所有可能位置就下结论
  • 不能放在所有pattern遍历完的最末尾:没法区分具体是哪个pattern没匹配到
  • 这个节点刚好完成了当前pattern在全文本的所有位置检查,判断结果完全准确

具体修改步骤

  • 每轮处理单个pattern前,先初始化布尔标记found = False,用来记录当前pattern是否存在匹配
  • 内层匹配循环中,只要找到一处匹配,除了记录匹配位置,同步把found标记改为True(如果需要收集该pattern的所有匹配位置,不需要提前break,继续遍历完所有窗口即可)
  • 单个pattern的所有窗口遍历完成后,立刻检查found标记,如果值为False,直接输出该pattern对应的未匹配提示

修改后可运行代码

text = "CTGATTCC"
patterns = ("ATT", "CT", "TTT")
match_positions = []

for p in patterns:
    p_length = len(p)
    found = False
    # 滑动窗口遍历所有可能匹配位置
    for i in range(0, len(text) - p_length + 1):
        if text[i:i+p_length] == p:
            match_positions.append(i + 1)  # 存储1起始的匹配位置
            found = True
    # 当前pattern全量检查完成后判断匹配状态
    if not found:
        print(f"Pattern '{p}' is not found")

print("Positions:", match_positions)

运行效果说明

用示例参数运行时,模式"TTT"在文本中无匹配,会先输出Pattern 'TTT' is not found,最终输出的匹配位置列表为[4, 1],分别对应"ATT"在位置4、"CT"在位置1的匹配结果。

小提示:原代码使用set作为变量名会覆盖Python内置的集合类型,属于不规范写法,修改时替换为语义明确的变量名即可避免潜在问题。

内容的提问来源于stack exchange,提问作者aycee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:00:58