Python統(tǒng)計字符串子串重復次數(shù)
字符串子串重復次數(shù)是在字符串統(tǒng)計與處理中的一項基礎(chǔ)操作。在DNA序列的分析中,這是一個非常常見的操作,因為重復序列在基因組中出現(xiàn)的頻率很高。 遍歷字符串所有子串并存入字典 首先,我們可以使用遍歷的
字符串子串重復次數(shù)是在字符串統(tǒng)計與處理中的一項基礎(chǔ)操作。在DNA序列的分析中,這是一個非常常見的操作,因為重復序列在基因組中出現(xiàn)的頻率很高。
遍歷字符串所有子串并存入字典
首先,我們可以使用遍歷的方法來統(tǒng)計字符串中子串的重復次數(shù)。我們將每一個子串存放在一個字典中,如果字典中已經(jīng)存在該子串,則將對應(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
我們將這種方法稱為“蠕蟲”,因為它類似于蠕蟲在運動時無重復統(tǒng)計的特點。該方法可以獲取字符串中所有字符,并統(tǒng)計它們在字符串中出現(xiàn)的次數(shù)。
升級版方法引入查詢避免不必要的統(tǒng)計
為了提高效率,我們可以對上述方法進行改進。在比較之前,先引入查詢,避免不必要的統(tǒng)計。具體操作是,在遍歷字符串時,如果當前子串已經(jīng)在字典中存在,則跳過該子串繼續(xù)遍歷;否則,進行統(tǒng)計。
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
這個方法是對前一種方法的升級版,引入了查詢操作,避免了不必要的統(tǒng)計。通過提高效率,我們可以更快地獲得重復子串的統(tǒng)計結(jié)果。
總結(jié)
希望生物信息工作者能夠相互交流,并提出修改建議,以進一步完善這些統(tǒng)計方法。