Python中的常用词

2024-09-29 23:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

如何编写一个代码来查找“gatccagatccatac”中最常见的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。在


Tags: 字符串代码textinforlenreturnif
3条回答

如果您想要一个简单的方法,可以考虑使用sliding window技术。在more_itertools中提供了一个实现,因此您不必自己创建一个。如果您pip install more_itertools,这很容易使用。在

简单示例

>>> from collections import Counter
>>> import more_itertools

>>> s = "GATCCAGATCCCCATAC"
>>> Counter(more_itertools.windowed(s, 2))
Counter({('A', 'C'): 1,
         ('A', 'G'): 1,
         ('A', 'T'): 3,
         ('C', 'A'): 2,
         ('C', 'C'): 4,
         ('G', 'A'): 2,
         ('T', 'A'): 1,
         ('T', 'C'): 2})

上面的例子演示了使用windowedCounter来获取所需的大部分信息。在

说明

一个长度为k=2的“窗口”或容器在序列中一步一步地滑动(例如step=1)。每个新组都作为Counter字典的键添加。每次发生,计数都会递增。最后一个Counter对象主要报告所有计数,并包括其他helpful features。在

最终解决方案

如果实际的字符串对很重要,那也很简单。我们将创建一个通用函数,将字符串分组并适用于任何k mers:

^{pr2}$

一般来说,当我想用python计算东西时,我使用Counter

from itertools import tee
from collections import Counter

dna = "GATCCAGATCCCCATAC"
a, b = tee(iter(dna), 2)
_ = next(b)
c = Counter(''.join(l) for l in zip(a,b))
print(c.most_common(1))

这将打印[('CC', 4)],这是一个元组中最常见的1个2-mer的列表,它们的计数在字符串中。在

实际上,我们可以将其推广到对给定的n找到最常见的n-单体。在

^{pr2}$

您可以先定义一个函数来获取字符串中的所有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的重复次数:

^{pr2}$

输出:

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

相关问题 更多 >

    热门问题