1 回答
TA贡献1848条经验 获得超6个赞
text.index始终返回找到的第一个索引。由于您seq逐个字母地迭代您 的字母,因此当您第一次点击以前找到的字母时,您会得到奇怪的结果。
第 5 个字母是第一个重复的 a c,因此text.index('c')返回第一个c1的索引,而不是您期望的 4 - 并且您在上一次点击 时重复c。
这种方法效率低下 - 与字母相比,您似乎对跨索引移动更感兴趣,所以我会使用:
for a in range(len(text)-(n-1)):
b = text[a:a+n]
c = len(re.findall(b, text, overlapped=True))
print ("the count for " + b + " is " + str(c))
而不是每次都搜索索引,这既低效又在您的情况下产生错误的结果。findall这里也是一种低效的计数方式 - 一个字典,特别是defaultdict可能被构造为更有效地计数。
请注意,您可以使用已经很好的内置函数:
>>> from collections import Counter
>>> seq='ACTGCATTTTGCATTTT'
>>> Counter((seq[i:i+3] for i in range(len(seq)-2)))
Counter({'TTT': 4, 'TGC': 2, 'GCA': 2, 'CAT': 2, 'ATT': 2, 'ACT': 1, 'CTG': 1, 'TTG': 1})
最后的点击是字符串结束的地方,你可以忽略它们。
添加回答
举报