Python統(tǒng)計(jì)字符串子串重復(fù)次數(shù)
字符串子串重復(fù)次數(shù)是在字符串統(tǒng)計(jì)與處理中的一項(xiàng)基礎(chǔ)操作。在DNA序列的分析中,這是一個(gè)非常常見(jiàn)的操作,因?yàn)橹貜?fù)序列在基因組中出現(xiàn)的頻率很高。 遍歷字符串所有子串并存入字典 首先,我們可以使用遍歷的
字符串子串重復(fù)次數(shù)是在字符串統(tǒng)計(jì)與處理中的一項(xiàng)基礎(chǔ)操作。在DNA序列的分析中,這是一個(gè)非常常見(jiàn)的操作,因?yàn)橹貜?fù)序列在基因組中出現(xiàn)的頻率很高。
遍歷字符串所有子串并存入字典
首先,我們可以使用遍歷的方法來(lái)統(tǒng)計(jì)字符串中子串的重復(fù)次數(shù)。我們將每一個(gè)子串存放在一個(gè)字典中,如果字典中已經(jīng)存在該子串,則將對(duì)應(yīng)的值加一;否則,將該子串添加到字典中,并將其值設(shè)為1。
dic {}
s 'AAAA'
for i in range(len(s)):
for j in range(i 2, len(s)):
t s[i:j]
if t in dic:
dic[t] 1
else:
dic[t] 1
我們將這種方法稱(chēng)為“蠕蟲(chóng)”,因?yàn)樗?lèi)似于蠕蟲(chóng)在運(yùn)動(dòng)時(shí)無(wú)重復(fù)統(tǒng)計(jì)的特點(diǎn)。該方法可以獲取字符串中所有字符,并統(tǒng)計(jì)它們?cè)谧址谐霈F(xiàn)的次數(shù)。
升級(jí)版方法引入查詢(xún)避免不必要的統(tǒng)計(jì)
為了提高效率,我們可以對(duì)上述方法進(jìn)行改進(jìn)。在比較之前,先引入查詢(xún),避免不必要的統(tǒng)計(jì)。具體操作是,在遍歷字符串時(shí),如果當(dāng)前子串已經(jīng)在字典中存在,則跳過(guò)該子串繼續(xù)遍歷;否則,進(jìn)行統(tǒng)計(jì)。
def worm(s):
dic {}
for i in range(len(s)-3):
j i
s1 s[i:i 2]
if s1 in dic:
continue
s2 s[i 2:]
while (s1) ! -1:
count 1
stemp s2
while (s1) ! -1:
count 1
stemp stemp[(s1) len(s1):]
if not (s1 in dic):
dic[s1] count
j 1
s1 s[i:j 2]
s2 s[j 2:]
return dic
這個(gè)方法是對(duì)前一種方法的升級(jí)版,引入了查詢(xún)操作,避免了不必要的統(tǒng)計(jì)。通過(guò)提高效率,我們可以更快地獲得重復(fù)子串的統(tǒng)計(jì)結(jié)果。
總結(jié)
希望生物信息工作者能夠相互交流,并提出修改建議,以進(jìn)一步完善這些統(tǒng)計(jì)方法。