0

私はpythonとバイオシーケンスに取り組んでいます。
シーケンスがあります。

seq1 = \
...        """ atgaaatttatcattgaacgtgagcatctgctaaaaccactgcaacaggtcagtagcccg
...        ctgggtggacgccctacgttgcctattttgggtaacttgttgctgcaagtcacggaaggc
...        tctttgcggctgaccggtaccgacttggagatggagatggtggcttgtgttgccttgtct
...        cagtcccatgagccgggtgctaccacagtacccgcacggaagttttttgatatctggcgt
...        ggtttacccgaaggggcggaaattacggtagcgttggatggtgatcgcctgctagtgcgc
...        tctggtcgcagccgtttctcgctgtctaccttgcctgcgattgacttccctaatctggat
...        gactggcagagtgaggttgaattcactttaccgcaggctacgttaaagcgtctgattgag
...        tccactcagttttcgatggcccatcaggatgtccgttattatttgaacggcatgctgttt
...        gagaccgaaggcgaagagttacgtactgtggcgaccgatgggcatcgcttggctgtatgc
...        tcaatgcctattggccagacgttaccctcacattcggtgatcgtgccgcgtaaaggtgtg
...        atggagctggttcggttgctggatggtggtgatacccccttgcggctgcaaattggcagt
...        aataatattcgtgctcatgtgggcgattttattttcacatctaagctggttgatggccgt
...        ttcccggattatcgccgcgtattgccgaagaatcctgataaaatgctggaagccggttgc
...        gatttactgaaacaggcattttcgcgtgcggcaattctgtcaaatgagaagttccgtggt
...        gttcggctctatgtcagccacaatcaactcaaaatcactgctaataatcctgaacaggaa
...        gaagcagaagagatcctcgatgttagctacgaggggacagaaatggagatcggtttcaac
...        gtcagctatgtgcttgatgtgctaaatgcactgaagtgcgaagatgtgcgcctgttattg
...        actgactctgtatccagtgtgcagattgaagacagcgccagccaagctgcagcctatgtc
...        gtcatgccaatgcgtttgtag"""

seq2 = \
...        """ accgtagcatctgctaaaaccagtacgcccg
...        ctgggtggacgatgcaacttgttgctgcaagtcacggaaggc
...        tctttgcggctgaccggtaccgacttggagatggagatggtggcttgtgttgccttgtct
...        cagtcccatgagccgggtgctaccacagtacccgcacggaagttttttgatatctggcgt
...        ggtttacccgaaggggcggaaattacggtagcgttggatggtgcatgatcgcctgctagtgcgc
...        tctggtcgcagccgtttctcgctgtctaccttgcctgcgattgacttccctaatctggat
...        gactggcagagtgaggttgaattcactttaccgcaggctacgttaaagcgtctgattgag
...        tccactcagttttcgatgctatttatgtccgttattatttgaacggcatgctgttt
...        gagaccgaaggcgaagagttacgtactgtggcgaccgatgggcatcgcttggctgtatgc
...        tcaatgcctattggccaggctaattcggtgatcgtgccgcgtaaaggtgtg
...        atggagctggttcggttgctggatggtggtgatacccccggcccctgcaaattggcagt
...        aataatattcgtgctcatgtgggcgattttattttcacatctaagctggttgatggccgt
...        ttcccggattatcgccgcgtattgccgaagaatcctgataaaatgctggaagccggttgc
...        gtcatgccaatgcgtttgtag"""

seq1 と seq2 の同じ文字列の数とそれぞれの位置を調べたい。これはパターン マッチングだけでなく、位置の取得も行います。Pythonを使用して同じことを行う方法を誰か教えてもらえますか?

4

3 に答える 3

1

インデクサー関数は、すべての位置をリストとして返します

def indexer(s, sub):
    positions=[]
    pos=0
    while True:
        pos=s.find(sub,pos+1)
        if pos==-1:
            return positions
        else:
            positions.append(pos)

マッチャー関数はdictを返します。dictの各キーは、aとbの両方で使用可能なシーケンスであり、それぞれのdict値は、aのすべての一致する位置とbのすべての一致する位置を含む2項目のタプルです。

def matcher(a,b):
    sequences=set()
    for l in range(1,len(a)):
        for pos in range(len(a)):
            sequences.add(a[pos:pos+l])
    for l in range(1,len(b)):
        for pos in range(len(b)):
            sequences.add(b[pos:pos+l]) 
    matches={}
    for seq in sequences:
        matches_a=indexer(a,seq)
        matches_b=indexer(b,seq)
        if result_a and result_b:
            matches[seq]=(matches_a,matches_b)
    return matches

この例は機能するはずです:

print matcher('asdfasdfa','asdfasasdfasdfasdfadfasdfdf') 
于 2012-08-27T13:53:15.547 に答える
0

おそらくウィキブックスはあなたが始めるのを助けることができますか?

于 2012-08-27T13:44:45.953 に答える
0

あなたはただ使うことができますindex

>>> seq.index(str)
1046

最初に出現した位置を見つけることに注意してください。次に、スライスから他のオカレンスを見つけようとすることができます。

編集済み

いくつかの発生がある場合、次のようなループが機能する可能性があります。

test = seq1 + ""
try:
    while test:
        position = test.index(str_)
        positions.append(position + last_position)
        position += len(str_)
        last_position += position
        test = test[position:]
except ValueError:
    print positions

文字列を使用するため、文字列のコピーを作成しseqます。次に、indexメソッドで位置をチェックし続け、それを格納し、それにpositions応じて文字列を更新します。

[PS] variable を呼び出すのは悪い、悪い考えstrです。組み込みを上書きしています...

于 2012-08-27T13:42:11.673 に答える