我是一名python初学者,我碰到过这个问题,我不知道我该如何去解决它。使用python计算一个字母在某个位置出现的次数
如果我有以下序列/串:
GATCCG
GTACGC
我如何计算每个字母出现在每个位置的频率。即)G发生在两个序列中的两个位置,A发生在位置1零次等等。
任何帮助将不胜感激,谢谢!
我是一名python初学者,我碰到过这个问题,我不知道我该如何去解决它。使用python计算一个字母在某个位置出现的次数
如果我有以下序列/串:
GATCCG
GTACGC
我如何计算每个字母出现在每个位置的频率。即)G发生在两个序列中的两个位置,A发生在位置1零次等等。
任何帮助将不胜感激,谢谢!
可以使用和enumerate
的defaultdict
的组合如下所示:
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]
对不起,你能解释一下这是干什么的吗? – pythonbeginner2506
哦,谢谢你,我有一些输出,我明白了。我更喜欢输出看起来更像{'g':[2,0,0,0,1,1],...},这可能吗? – pythonbeginner2506
所以。现在你应该被覆盖。我认为defaultdicts的功能非常直观。 – schwobaseggl
不知道这是最好的方式,但你可以用拉链做一个排序的字符串转置的,在每个生产字母的元组位置,例如:
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(或其他方法)来获得所需的内容。
你想要什么格式?你能否给我们一个例子,比如'{'g':[2,0,0,0,1,1],...}'?那是你要的吗? – zondo
是的,字典会很好! – pythonbeginner2506