如何编写代码来找到“GATCCAGATCCCCATAC”中最常见的 2-mer。
我已经写了这段代码,但似乎我错了,请帮助纠正我。
def PatternCount(Pattern, Text):
count = 0
for i in range(len(Text)-len(Pattern)+1):
if Text[i:i+len(Pattern)] == Pattern:
count = count+1
return count
此代码打印字符串中最常见的 k-mer,但它没有给我
给定字符串中的 2-mer。
最佳答案
您可以先定义一个函数来获取字符串中的所有 k-mer:
def get_all_k_mer(string, k=1):
length = len(string)
return [string[i: i+ k] for i in xrange(length-k+1)]
然后就可以使用
collections.Counter
来统计每个 k-mer 的重复次数:>>> from collections import Counter
>>> s = 'GATCCAGATCCCCATAC'
>>> Counter(get_all_k_mer(s, k=2))
输出:
Counter({'AC': 1,
'AG': 1,
'AT': 3,
'CA': 2,
'CC': 4,
'GA': 2,
'TA': 1,
'TC': 2})
另一个例子 :
>>> s = "AAAAAA"
>>> Counter(get_all_k_mer(s, k=3))
输出 :
Counter({'AAA': 4})
# Indeed : AAAAAA
^^^ -> 1st time
^^^ -> 2nd time
^^^ -> 3rd time
^^^ -> 4th time