0

文字列内のすべての部分文字列に一致し、一致するすべての開始位置を返す必要があります。

入力データの例:

2 4 
AC
TGGT 
4 25 
CATA 
TCATATGCAAATAGCTGCATACCGA 
0 0  ## to end the file

実際には必要ないように思われるため、そのような行で数字を使用せずにこれを行いたいと思います;(ただし、入力ファイルにはまだあります)

そして、このコードの何が問題なのか正確にはわかりませんが、出力ファイルに 0 を印刷するという印刷 (無限ループ) を続けます。

#!/usr/bin/env python
import sys
from operator import itemgetter
def find_all(a_str, sub):
    start = 0
    while True:
        start = a_str.find(sub, start)
        if start == -1: return
        yield start
        start += len(sub)

if __name__ == '__main__':
    testnum=0
    input_file =  open(sys.argv[1])
    #input_lines=input_file.split("\n")
    output_file =  open(sys.argv[2],"w")
    while True:
       testnum+=1
       values_raw = input_file.readline()
       #values_raw=raw_input() ##rubish
       values=values_raw.split()
       flag=0
       for element in values:
           if element == "0":
          break
       string1=str(input_file.readline())
       string2=str(input_file.readline())
       lista = find_all(string2,string1)
       output_file.write("\nTeste "+str(testnum)+"\nocorrencia direta: ")
       for item in lista:
         output_file.write(str(item)+" ") 
       #reversed search
       string1=string1[::-1]
       lista = find_all(string2,string1)
       output_file.write("\nTeste "+str(testnum)+"\nocorrencia inversa complementar: ")
       for item in lista:
         output_file.write(str(item)+" ") 
       if ((len(string1)==0)):
         break 

コードを貼り付けるときに string1 と string2 の行を誤って削除しました //元の一致と逆の一致に一致しますが、コードはほとんど同じなので、これも投稿すべきではないと考えました。

4

1 に答える 1

1

使用できますregex

>>> import re
>>> pat = 'CATA'
>>> strs = 'TCATATGCAAATAGCTGCATACCGA'
>>> [m.start() for m in re.finditer(pat, strs)]
[1, 17]
于 2013-06-25T22:03:06.877 に答える