使用 python 计算字母在特定位置出现的次数
Counting the number of times a letter occurs at a certain position using python
我是 python 初学者,我遇到过这个问题,但我不确定该如何解决。
如果我有以下sequence/strings:
GATCCG
GTACGC
如何计算每个字母在每个位置出现的频率。即)G在两个序列中出现两次,A出现在位置1零次等
任何帮助将不胜感激,谢谢!
您可以像这样使用 defaultdict
and enumerate
的组合:
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(或其他方法)得到什么你要。
我是 python 初学者,我遇到过这个问题,但我不确定该如何解决。
如果我有以下sequence/strings:
GATCCG
GTACGC
如何计算每个字母在每个位置出现的频率。即)G在两个序列中出现两次,A出现在位置1零次等
任何帮助将不胜感激,谢谢!
您可以像这样使用 defaultdict
and enumerate
的组合:
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(或其他方法)得到什么你要。