最长连续序列计算结果异常(恒为1或数值过高)问题咨询
问题根因
- for循环迭代变量手动修改无效:Python中
for i in range(xxx)的循环变量i由range生成器直接赋值,每次循环启动时都会被覆盖为生成的下一个值,你在循环体内部写的i += x不会影响下一次循环的i取值。比如当前循环i=0匹配成功,你手动把i改成3,下一次循环i会自动变成1,导致连续匹配永远只能触发1次,run最多累计到1,所以输出始终为1。 - 注释
run = 0后结果偏高:这行代码的作用是匹配失败时清零连续计数,注释后匹配失败的间隔不会打断计数,run会累计所有匹配成功的次数,而不是连续匹配的次数,自然结果远大于正确值。
修复方案
将内层的for循环替换为while循环,手动控制索引步进,保证匹配成功后可以跳过已匹配的x位字符:
# find sequences for y in range(len(headers)-1): x = len(headers[y+1]) highest = 0 run = 0 i = 0 seq_len = len(sequence) while i < seq_len: if (sequence[i:i+x]) == headers[y+1]: run += 1 # 匹配成功直接跳x位,避免重复匹配 i += x else: # 匹配失败更新最长长度,清零连续计数 if run > highest: highest = run run = 0 # 匹配失败只跳1位 i += 1 # 循环结束后额外判断一次,避免最长连续序列出现在末尾的情况被漏掉 if run > highest: highest = run results[y] = highest
内容的提问来源于stack exchange,提问作者Arago644
相关产品推荐
相关产品推荐

