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

程序无法进入while循环:统计子串连续重复次数代码输出空列表

问题根本原因

  1. while循环条件写反:触发elif deoxy[j:k] == seq[i]分支时,p、l初始值就是j和j+len(seq[i]),此时deoxy[p:l]必然等于seq[i],而你设置的while循环触发条件是deoxy[p:l] != seq[i],所以永远不会进入循环,points始终为0,自然不会往lists[i]里加任何值,最终输出空列表。
  2. 额外逻辑缺陷:
    • 缺少字符串边界判断,j+len(seq[i])超过长字符串长度时的无效切片会浪费算力,也可能导致统计错误
    • 内层j遍历步长为1,会重复统计同一个连续重复段的多个起始位置
    • 计数逻辑不符合需求,连续重复的首次匹配结果没有计入次数

修复后代码

# 假设lists已提前初始化为包含8个空列表的容器
deoxy_len = len(deoxy)
# 外层遍历所有待匹配子串
for i in range(8):
    current_seq = seq[i]
    seq_len = len(current_seq)
    j = 0
    while j <= deoxy_len - seq_len:
        # 当前位置不匹配,跳过1位
        if deoxy[j:j+seq_len] != current_seq:
            j += 1
            continue
        # 匹配到了,统计连续重复次数
        repeat_count = 0
        p = j
        while p <= deoxy_len - seq_len and deoxy[p:p+seq_len] == current_seq:
            repeat_count += 1
            p += seq_len
        # 可根据需求调整阈值,比如只统计连续重复≥2次的场景就改成repeat_count >= 2
        if repeat_count >= 1:
            lists[i].append(repeat_count)
        # 跳过整个已统计的连续段,避免重复统计
        j = p

print(lists)

逻辑说明

  • 调整了while循环的触发条件,匹配到子串时才进入计数循环,连续匹配成功就累加次数
  • 增加边界判断,避免索引越界导致的无效匹配
  • 统计完一段连续重复子串后,直接跳转到该段结束的位置,避免重复统计同一段
  • 计数逻辑直接从首次匹配成功开始累加,符合连续重复次数的统计需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:45:00