ロザリンドの課題には解決策があることは承知していますが、楽しみを台無しにしたくありません。「共通のモチーフを見つける」ための解決策を見つけたと思っていましたが、私の答えはいつも間違っています.
問題は、特定のシートで ">" で始まる行で構成される最長の共通部分文字列を見つけることと、">" で始まる別の行がシーケンスを構成するまでの次の行を見つけることです。これがどのように見えるかです:
>Rosalind_1
GATTACA
>Rosalind_2
TAGACCA
>Rosalind_3
ATACA
100 個ほどの DNA 断片があり、最長の共通部分配列を見つける必要があります。これが私のアプローチです:
rosa = open("rosalind_lcsm.txt","r")
oku = rosa.readlines()
strs=[]
for line in oku:
if line.startswith(">"):
strs.append("kiko")
else:
strs.append(line)
rosa.close()
strs = strs[1:]
joint = "".join(strs)
joint_s = joint.split("kiko")
theOne = joint_s[0]
rest = joint_s[1:]
start=0
end=1
matches=[]
while end < len(theOne):
end+=1
while all(theOne[start:end] in seq for seq in rest):
end+=1
else:
matches.append(theOne[start:end-1])
end+=1
start=end-1
print(max(matches, key=len))
私の戦略は次のとおりでした。ファイルを読み取り、シーケンスに分割し、最初のシーケンスを選択して、その共通部分を残りの部分と比較します。シーケンスは ATGC で作成されており、1 つの一致が確実に発生するため、最低 2 つの一致を確認しています。それは文字から始まり、マッチが壊れるまで 1 文字ずつ拡大し続けます。次に、最後に一致したビットを取り、リストに追加します。その後、停止したところから再開します。
私の解決策は答えを出しますが、それは正しいものではなく、コードの誤解を招く部分を見つけることができません。誰かが私のアプローチを理解しようとし、それを修正するためのアドバイスをくれますか?