程序无法进入while循环:统计子串连续重复次数代码输出空列表
问题根本原因
- 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]里加任何值,最终输出空列表。 - 额外逻辑缺陷:
- 缺少字符串边界判断,
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
相关产品推荐
相关产品推荐

