1 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
text.index始終返回找到的第一個(gè)索引。由于您seq逐個(gè)字母地迭代您 的字母,因此當(dāng)您第一次點(diǎn)擊以前找到的字母時(shí),您會(huì)得到奇怪的結(jié)果。
第 5 個(gè)字母是第一個(gè)重復(fù)的 a c,因此text.index('c')返回第一個(gè)c1的索引,而不是您期望的 4 - 并且您在上一次點(diǎn)擊 時(shí)重復(fù)c。
這種方法效率低下 - 與字母相比,您似乎對(duì)跨索引移動(dòng)更感興趣,所以我會(huì)使用:
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))
而不是每次都搜索索引,這既低效又在您的情況下產(chǎn)生錯(cuò)誤的結(jié)果。findall這里也是一種低效的計(jì)數(shù)方式 - 一個(gè)字典,特別是defaultdict可能被構(gòu)造為更有效地計(jì)數(shù)。
請(qǐng)注意,您可以使用已經(jīng)很好的內(nèi)置函數(shù):
>>> 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})
最后的點(diǎn)擊是字符串結(jié)束的地方,你可以忽略它們。
添加回答
舉報(bào)