1

ロザリンドの課題には解決策があることは承知していますが、楽しみを台無しにしたくありません。「共通のモチーフを見つける」ための解決策を見つけたと思っていましたが、私の答えはいつも間違っています.

問題は、特定のシートで ">" で始まる行で構成される最長の共通部分文字列を見つけることと、">" で始まる別の行がシーケンスを構成するまでの次の行を見つけることです。これがどのように見えるかです:

>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 文字ずつ拡大し続けます。次に、最後に一致したビットを取り、リストに追加します。その後、停止したところから再開します。

私の解決策は答えを出しますが、それは正しいものではなく、コードの誤解を招く部分を見つけることができません。誰かが私のアプローチを理解しようとし、それを修正するためのアドバイスをくれますか?

4

1 に答える 1