2

次のコードをコンパイルしているときに、構文エラーは発生しませんが、すべての結果が得られるわけではありません。プログラムのポイントは、文字列シーケンスをチェックし、特定の部分文字列を見つけて、その部分文字列とそれに続く 19 文字を含む結果の文字列を出力することです。これらの文字列が発生するたびに、結果のすべての文字列を出力します。

ここにコードがあります..

x=raw_input('GET STRING:: ');
m=len(x);
k=0;
while(k<m):
    if('AAT'in x or 'AAC' in x or 'AAG' in x):
        start = x.find('AAT') or x.find('AAC') or x.find('AAG')
        end=start+19
        print x[start:end]

ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT のような文字列を入力している場合。AAT のみを検索し、結果の部分文字列を出力しますが、AAG と AAC は出力しません。オペレーターの実装を手伝ってくれる人はいますか???

4

6 に答える 6

2

あなたの例では、正規表現を使用する方がおそらく良いでしょう。

>>> text = 'ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT'
>>> re.search('(?:AA[TCG])(.{19})', text).group(1)
'CTTGTGATTGCATTGACAC'

re.findall文字列から複数の一致が必要な場合に変更できます。(ただし、オーバーラップマッチが必要な場合、これはあまりうまく機能しません(つまり、3の文字列が19に再び表示されます)。

于 2013-02-21T12:53:43.000 に答える
1

kから始まる最初の出現を検索します

mystring=raw_input('GET STRING:: ')
m=len(mystring)
k=0
while(k<m):
   x=mystring[k:]
   start=min(x.find('AAT'),x.find('AAC'),x.find('AAG'))
   end=min(start+19,m)
   print x[start:end]
   k+=start+1
于 2013-02-21T12:53:34.133 に答える
0

先読みアサーションをキャプチャ グループと共に使用する正規表現を使用して、オーバーラップ マッチを処理できます。

>>> import re
>>> regex = re.compile("(?=(AA[TCG].{19}))")
>>> regex.findall("ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT")
['AATCTTGTGATTGCATTGACAC', 'AAGAACTCTTAGTGAAATATCA', 'AACTCTTAGTGAAATATCAGTA']
>>>
于 2013-02-21T14:19:04.170 に答える
0

3 つのステートメントstartの負でない最小値に設定する必要があります。find

于 2013-02-21T12:44:19.257 に答える
0

これはどう:

import re

str= "ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT"
alist = ['AAT','AAC','AAG']
newlist= [re.findall(e,str) for e in alist] 
Output: [['AAT','AAT'],['AAC'],['AAG']]. 

ここでは、インデックスが少し重くなっています。

import re
astr= "ATGGAATCTTGTGATTGCATTGACACGCCATGCCCTGGTGAAGAACTCTTAGTGAAATATCAGTATATCT"
def find_triple_base(astr, nth_sub):
    return [(m.end(), m.group(), astr[m.end(0):m.end(0)+nth_sub]) for m in re.finditer(r'AA[TCG]', astr)]
for e in find_triple_base(astr, 19): print(e)
Output:
(7, 'AAT', 'CTTGTGATTGCATTGACAC')
(43, 'AAG', 'AACTCTTAGTGAAATATCA')
(46, 'AAC', 'TCTTAGTGAAATATCAGTA')
(58, 'AAT', 'ATCAGTATATCT')

機能: findall は、検索したい基本トリプル (alist) のすべての出現箇所を見つけ、基本トリプルを含む 3 つのリストを含む新しいリストを生成します。例: [['AAT','AAT'],['AAC'], ['AAG']]。これを印刷するのは簡単です。

これが役立つことを願っています!

于 2013-02-21T13:35:17.980 に答える
-1

これを見てください:http://ideone.com/U70n4y

コード:

x=raw_input('GET STRING:: ');
m=len(x);
k=0
if('AAT'in x ):
    start = x.find('AAT')
    end=start+19
    print x[start:end]

elif('AAC' in x ):
    start = x.find('AAC')
    end=start+19
    print x[start:end]

elif('AAG' in x):
    start = x.find('AAG')
    end=start+19
    print x[start:end]

編集:この正規表現コードを試してください

import re
y=r"(?:AA[TCG]).{19}"
x=raw_input('GET STRING:: ');
l= re.findall(y,x)
for x in l:
    print x
    print len(x)

http://ideone.com/U70n4y

于 2013-02-21T12:56:57.877 に答える