2

3 のリーディング フレームを使用して特定のパターンを検出し、そのシーケンスから 3 の倍数で別のパターンを見つけることができるスクリプトを作成しようとしています。

sequence = 'TCATGAGGCTTTGGTAAATAT'

私はそれが必要です:

...目的のパターン (つまり、「ATG」) が見つかるまで、読み取りフレーム 3 でスキャンします。

...元のシーケンスで最初のパターン ('ATG') が開始した位置と、2 番目のパターンが開始した位置 ('TAA') をマークします。この場合、「ATG」の場合は 3 位、「TAA」の場合は 15 位になります。

...最初のパターンから 2 番目のパターン 'TAA' に到達するまでの各トリプレットのリストを作成します (つまり、'ATG','AGG','CTT',TGG','TAA')

3 のセットで読み取るための読み枠を作成するにはどうすればよいですか? 読み取り値を取得する方法を見つけたら、ifステートメントを作成できることを知っています

reading_frame=[]

for frame in sequence:
    if k == 'ATG':
        reading_frame.append(k)

最初に読み枠が必要です

4

3 に答える 3

2

sequence一連の 3 要素フレームに分解することから始めることができます

sequence = 'TCATGAGGCTTTGGTAAATAT'
frames = [sequence[i:i+3] for i in range(0,len(sequence),3)]
print "Frames:",frames
frames_before_ATG,frames_after_ATG = frames[:frames.index("ATG")],frames[frames.index("ATG")+1:]

frames次に、最初のパターンが見つかるまでリストを繰り返します。

于 2012-09-20T22:19:58.943 に答える
1

ATGinの最初の位置を見つけるにsequenceは、はるかに簡単です。

>>> sequence.find('ATG')

あなたの例で2は、パターン位置のインデックスを与えます。次に、その位置の後の 2 番目のパターンを探します。

>>> idx_1 = sequence.find('ATG')
>>> idx_2 = sequence[idx_1:].find('TTA')

( はpositionsequence[idx_1:]の後の要素を返します)sequenceidx_1

idx_2はオフセットされていることに注意してくださいidx_1(つまり、元のリストでのパターン 2 の実際の位置は ですidx_2+idx_1。パターンが見つからない場合、.findメソッドは -1 を返すことに注意してください。これに対処するために何らかのテストを追加することをお勧めします。場合。

2 つのパターンを見つけたら、仲介者のリストを次のように作成できます。

>>> subsequence = sequence[idx_1:idx_2+idx_1]
>>> [subsequence[i:i+3] for i in range(0, len(subsequence), 3)]

その例に従って、パターンのリストを簡単に繰り返すことができます。

が 3 の倍数かどうかを確認したいidx_1%3 == 0場合idx_1があります (最初のフレームが 0 から始まると仮定します)。そうでない場合は、少なくとも、シーケンスの先頭が破棄されることを知っています。

于 2012-09-20T22:16:13.770 に答える
0
sequence = 'TCATGAGGCTTTGGTAAATAT'

frame1 = sequence.find('ATG')

my_list = []

for codon in range(len(sequence)):
    next_codon = sequence[frame1:frame1+3]
    my_list.append(next_codon)
    frame1 +=3
    if next_codon == 'TAA':
        break

print my_list

['ATG'、'AGG'、'CTT'、'TGG'、'TAA']

于 2012-09-20T22:42:00.040 に答える