0

文字列から dna = 'ATAGGGATAGGGAGAGAGCGATCGAGCTAG' と言う dna.format = 'ATAGGGATAG','GGGAGAGAG' と言う部分文字列を取得した モジュロを使用していますが、機能していません!

import re
if mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
print re.findall("ATA"(.*?)"AGA" , mydna)
if len(mydna)%3 == 0
   print mydna

修正されたコード

import re
mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
re.findall("ATA"(.*?)"AGA" , mydna.format)
if len(mydna.format)%3 == 0:
   print mydna.format

これでも、長さが 3 で割り切れる部分文字列は得られません。. 何が間違っているのですか?

印刷される長さが3で割り切れる部分文字列のみを期待しています

4

4 に答える 4

1

オーバーラップ部分文字列を含めるために、次の長いバージョンがあります。アイデアは、すべての開始マークと終了マークを見つけて、それらの間の距離を計算することです。

mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
[mydna[start.start():end.start()+3] for start in re.finditer('(?=ATA)',mydna) for end in re.finditer('(?=AGA)',mydna) if end.start()>start.start() and (end.start()-start.start())%3 == 0]
['ATAGGGATAGGG', 'ATAGGG']

重複するものも含め、すべての部分文字列を表示します。

[mydna[start.start():end.start()+3] for start in re.finditer('(?=ATA)',mydna) for end in re.finditer('(?=AGA)',mydna) if end.start()>start.start()]
['ATAGGGATAGGG', 'ATAGGGATAGGGAG', 'ATAGGGATAGGGAGAGAGC', 'ATAGGG', 'ATAGGGAG', 'ATAGGGAGAGAGC']
于 2011-12-07T11:25:31.950 に答える
0

modulo を使用するのが正しい手順です。うまくいかない場合は、やり方が間違っています。コードをデバッグするために、コードの例を提供してください。

于 2011-12-05T19:49:37.807 に答える
0

そのために正規表現を使用することもできます。

re.findall('ATA((...)*?)AGA', mydna)

内側の中括弧は一度に 3 文字に一致します。

于 2011-12-05T20:34:53.163 に答える
0

re.findAll() は、一致する文字列の配列を返します。目的を達成するには、それらのそれぞれを繰り返し処理し、それらの文字列に対してモジュロを実行する必要があります。

于 2011-12-05T20:53:56.410 に答える