DNA配列のリストから始めて、可能なすべてのコンセンサス(各位置で最高のヌクレオチド頻度を持つ結果の配列)配列を返さなければなりません。いくつかの位置でヌクレオチドが同じ最高頻度を持つ場合、最高頻度で可能なすべての組み合わせを取得する必要があります。見返りとして、プロファイル マトリックス (各配列の各ヌクレオチドの頻度を含むマトリックス) も必要です。
これはこれまでの私のコードです (ただし、コンセンサス シーケンスは 1 つしか返されません)。
seqList = ['TTCAAGCT','TGGCAACT','TTGGATCT','TAGCAACC','TTGGAACT','ATGCCATT','ATGGCACT']
n = len(seqList[0])
profile = { 'T':[0]*n,'G':[0]*n ,'C':[0]*n,'A':[0]*n }
for seq in seqList:
for i, char in enumerate(seq):
profile[char][i] += 1
consensus = ""
for i in range(n):
max_count = 0
max_nt = 'x'
for nt in "ACGT":
if profile[nt][i] > max_count:
max_count = profile[nt][i]
max_nt = nt
consensus += max_nt
print(consensus)
for key, value in profile.items():
print(key,':', " ".join([str(x) for x in value] ))
TTGCAACT
C : 0 0 1 3 2 0 6 1
A : 2 1 0 1 5 5 0 0
G : 0 1 6 3 0 1 0 0
T : 5 5 0 0 0 1 1 6
(ご覧のとおり、4 位では、C と G が同じ最高スコアを持っています。つまり、2 つのコンセンサス シーケンスを取得する必要があります)
このコードを変更して、考えられるすべてのシーケンスを取得することは可能ですか? または、正しい結果を取得するロジック (疑似コード) を説明していただけますか?
事前にどうもありがとうございました!