所以我试图解决这个问题,我必须在python的某些行中找到最常用的6个字母的字符串,所以我意识到可以做这样的事情:
>>> from collections import Counter
>>> x = Counter("ACGTGCA")
>>> x
Counter({'A': 2, 'C': 2, 'G': 2, 'T': 1})
现在,我使用的数据是DNA文件,文件格式如下:
> name of the protein
ACGTGCA ... < more sequences>
ACGTGCA ... < more sequences>
ACGTGCA ... < more sequences>
ACGTGCA ... < more sequences>
> another protein
AGTTTCAGGAC ... <more sequences>
AGTTTCAGGAC ... <more sequences>
AGTTTCAGGAC ... <more sequences>
AGTTTCAGGAC ... <more sequences>
我们可以先从一个蛋白质开始,但是如何修改上面的代码块以搜索最常见的6个字符的字符串模式?谢谢。
答案 0 :(得分:4)
我认为最简单的方法就是这样做:
>>> from collections import Counter
>>> protein = "AGTTTCAGGAC"
>>> Counter(protein[i:i+6] for i in range(len(protein)-5))
Counter({'TTCAGG': 1, 'AGTTTC': 1, 'CAGGAC': 1, 'TCAGGA': 1, 'GTTTCA': 1, 'TTTCAG': 1})
答案 1 :(得分:4)
old itertools docs(通过this answer)提供window
功能,这是@Duncan答案的通用版本。
def window(seq, n=2):
"Returns a sliding window (of width n) over data from the iterable"
" s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
然后你可以做
collections.Counter(window(x))
就个人而言,我仍然会使用字符串切片,但如果您需要,这是一个通用版本。