我是一名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