计算字符串中的多个字母组

2024-04-20 03:29:39 发布

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

我一直在尝试调整python函数来计算字母组而不是单个字母,但我遇到了一些麻烦。下面是我要计算单个字母的代码:

my_seq = "CTAAAGTCAACCTTCGGTTGACCTTGAAAGGGCCTTGGGAACCTTCGGTTGACCTTGAGGGTTCCCTAAGGGTT"

def count_letters(str):
    counts = {}
    for c in str:
        if c in counts:
            counts[c]+=1
        else:
            counts[c]=1
    return counts

counts = count_letters(my_seq)
print(counts)

该函数当前为每个单独的字母输出计数。现在它打印这个:

^{pr2}$

理想情况下,我希望它打印如下:

{'CTA': 2, 'TAG': 3, 'CGC': 1, 'GAG': 2 ... }

我对python还很陌生,这很困难。在

谢谢你!在


Tags: 函数代码inforifmydefcount
2条回答

使用^{}可以很快完成此操作。在

from collections import Counter

s = "CTAACAAC"

def chunk_string(s, n):
    return [s[i:i+n] for i in range(len(s)-n+1)]

counter = Counter(chunk_string(s, 3))
# Counter({'AAC': 2, 'ACA': 1, 'CAA': 1, 'CTA': 1, 'TAA': 1})

编辑:详细说明chunk_string

它以字符串s和块大小n作为参数。每个s[i:i+n]是一个长度为n个字符的字符串片段。循环迭代有效的索引,其中字符串可以被切片(0len(s)-n)。然后将所有这些片段分组到一个列表理解中。等效方法为:

^{pr2}$

这基本上是Jared Goguen发布的第一个答案,但是作为对OP的评论的回复,对于一种不导入模块的可能方法:

>>> m
'CTAAAGTCAACCTTCGGTTGACCTTGAGGGTTCCCTAAGGGTTGGGGATGACCCTTGGGTCTAAAGTCAACCTTCGGTTGACCTTGAGGGTTCCCTAAGGGTT'
>>> l = [m[i:i+3] for i in range(len(m)-2)]
>>> 
>>> d = {}
>>> 
>>> for k in set(l):
        d[k] = l.count(k)


>>> d
{'AAG': 4, 'GGA': 1, 'AAA': 2, 'TAA': 4, 'AGG': 4, 'AGT': 2, 'GGG': 7, 'ACC': 5, 'CGG': 2, 'GGT': 7, 'TCC': 2, 'TGA': 5, 'CAA': 2, 'TGG': 2, 'GTC': 3, 'AAC': 2, 'ATG': 1, 'CTT': 5, 'TCA': 2, 'CCT': 7, 'CCC': 3, 'GTT': 6, 'TTG': 6, 'GAT': 1, 'GAC': 3, 'TCG': 2, 'GAG': 2, 'CTA': 4, 'TTC': 4, 'TCT': 1}

或者,如果你是一句话的粉丝:

^{pr2}$

相关问题 更多 >