を使用して、特定の位置に文字が出現する回数を数えます。私はPythonの初心者だと私はこの問題に遭遇してきたと私はそれに取り組んで行くだろうかわからないのpython
私は次のシーケンス/文字列を使用している場合:
GATCCG
GTACGC
私は、各文字が各位置で発生する頻度を数える方法へ。すなわち)Gは、二つの配列で二度1位で発生し、A等の位置1でゼロ回発生
すべてのヘルプはあなたに感謝、感謝されるだろう!
を使用して、特定の位置に文字が出現する回数を数えます。私はPythonの初心者だと私はこの問題に遭遇してきたと私はそれに取り組んで行くだろうかわからないのpython
私は次のシーケンス/文字列を使用している場合:
GATCCG
GTACGC
私は、各文字が各位置で発生する頻度を数える方法へ。すなわち)Gは、二つの配列で二度1位で発生し、A等の位置1でゼロ回発生
すべてのヘルプはあなたに感謝、感謝されるだろう!
あなたはとても似defaultdict
と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
これは、第1および第2のキーとしての位置として文字をとり、文字はで言ったの発生回数を提供し、ネストされた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
ない、これが最良の方法ですが、あなたはそれぞれの文字のタプルを生成する、文字列の転置の並べ替えを行うにはジップを使用できることを確認:あなたは、位置カウントのリストが必要な場合
位置、例えば:あなたは、Tから
[('G', 'G'), ('A', 'T'), ('T', 'A'), ('C', 'C'), ('C', 'G'), ('G', 'C')]
見ることができます:
x = 'GATCCG'
y = 'GTACGC'
zipped = zip(x,y)
print zipped
が出力として生成されます彼はその後、あなたが望むもので取得するためにカウンタ(またはいくつかの他の方法)を使用することができますなど、二つの文字列の最初の位置は、2つのGを含んで、第二の位置はAとTが含まれていることをタプル。
あなたはそれで何をフォーマットしたいですか? '{'g':[2、0、0、0、1、1]、...}'のような例を教えてください。それはあなたが欲しいものですか? – zondo
ええ、辞書は良いだろう! – pythonbeginner2506