使用python计算字母在某个位置出现的次数

时间:2016-04-25 17:47:13

标签: python string count position frequency

我是初学者,我遇到过这个问题而且我不确定如何处理它。

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

GATCCG

GTACGC

如何计算每个位置发生的每个字母的频率。即)G在两个序列中的位置1发生两次,A发生在位置1的零次等。

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

2 个答案:

答案 0 :(得分:4)

您可以使用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]

答案 1 :(得分:0)

不确定这是最好的方法,但你可以使用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(或其他一些方法)来得到你想要的东西。