繁体   English   中英

使用python计算字母在特定位置出现的次数

[英]Counting the number of times a letter occurs at a certain position using python

我是python的初学者,遇到过这个问题,我不确定如何解决。

如果我有以下顺序/字符串:

GATCCG

GTACGC

如何计算每个字母在每个位置出现的频率。 也就是说,G在两个序列中两次出现在位置1处,A在位置1发生了0次,依此类推。

任何帮助,将不胜感激,谢谢!

您可以使用defaultdictenumerate的组合,如下所示:

from  collections import defaultdict

sequences = ['GATCCG', 'GTACGC']
d = defaultdict(lambda: defaultdict(int))  # d[char][position] = count
for seq in sequences:
    for i, char in enumerate(seq):  # enum('abc'): [(0,'a'),(1,'b'),(2,'c')]
        d[char][i] += 1

d['C'][3]  # 2
d['C'][4]  # 1
d['C'][5]  # 1

这将建立一个嵌套的defaultdict ,它将字符作为第一键,并将位置作为第二个键,并提供在所述位置出现所述字符的次数。

如果您想要仓位列表:

max_len = max(map(len, sequences))
d = defaultdict(lambda: [0]*max_len)  # d[char] = [pos0, pos12, ...]
for seq in sequences:
    for i, char in enumerate(seq): 
        d[char][i] += 1

d['G']  # [2, 0, 0, 0, 1, 1]

不确定这是最好的方法,但是您可以使用zip在字符串上进行某种转置,从而在每个位置生成字母的元组,例如:

x = 'GATCCG' 
y = 'GTACGC'

zipped = zip(x,y)

print zipped

将产生作为输出:

[('G', 'G'), ('A', 'T'), ('T', 'A'), ('C', 'C'), ('C', 'G'), ('G', 'C')]

从元组中可以看到,两个字符串的第一个位置包含两个G,第二个位置包含A和T,依此类推。然后可以使用Counter(或其他方法)获得所需的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM