我一直在尝试调整我的 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)
该函数目前计算出每个字母的计数。现在它打印这个:
{'C': 23, 'T': 30, 'G': 30, 'A': 20}
理想情况下,我希望它打印出如下内容:
{'CTA': 2, 'TAG': 3, 'CGC': 1, 'GAG': 2 ... }
我是 python 的新手,事实证明这很困难。
请您参考如下方法:
这可以使用 collections.Counter 很快完成.
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 和一个 block 大小 n 作为参数。每个 s[i:i+n] 都是字符串的一部分,长度为 n 个字符。循环遍历可以对字符串进行切片的有效索引(0 到 len(s)-n)。然后将所有这些切片分组到一个列表理解中。一个等效的方法是:
def chunk_string(s, n):
chunks = []
last_index = len(s) - n
for i in range(0, last_index + 1):
chunks.append(s[i:i+n])
return chunks
