2017-05-17 4 views
0

中リストとのマッチングにより、文字列の文字を検索して追加することは、以下の文字列に含まれていますリストがあるのPython 2.7

seq_list = ['C','CA','CAF','CMMVF','E','CMM','CMMF','CMMFF',...] 

と文字列は以下のように定義することができます。

a_str = 'CAFCMMVFCMMECMMFFCCAF' 

の中で最も長い文字列をa_strに左から右に反復して一致させ、その後に文字('|')を追加する必要があります。たとえばについては

それは、このような下に達成されなければならないように、

a_str'C'で始まりますが、'CAF''C'より長い配列を有しているため、実際の文字列は'CAF'あり、 :

a_str = 'CAF|CMMVFCMMECMMFFCCAF' #actual sequence match 
     'C|AFCMMVFCMMECMMFFCCAF' #false sequence match 

次に、残りのa_str_rはliこのa_str_r = 'CMMVFCMMECMMFFCCAF'の文字の後に'|'が追加されました。反復プロセスは、文字列の最後まで、リストから最も長いシーケンスを照合することによって、再びやり直す必要があり、最終的な結果は次のようにする必要がありますように:

a_str = 'CAF|CMMVF|CMM|E|CMMFF|C|CAF|' 

これは、この問題のための試みの一つでした、それでも正しいことはできませんでした!

a_str_r = [] 

for each in seq_list: 
    for i in a_str: 
     if each in i: 
      a_str_r.append(i+'|') 
return a_str_r 

答えて

1

最も左の最長一致を検索したいとします。これは、正規表現検索の際立っています。

import re 
seq_list = ['C','CA','CAF','CMMVF','E','CMM','CMMF','CMMFF'] 
# Sort to put longer match strings before shorter ones 
sseq_list = sorted(seq_list, key=lambda a: len(a), reverse=True) 
# Turn list into a regular expression string 
sseq_re = '|'.join(sseq_list) 
# Compile regular expression string 
rx = rx = re.compile(sseq_re) 
# Put pipe characters between the matches 
print '|'.join(rx.findall('CAFCMMVFCMMECMMFFCCAF')) 
+0

ありがとうございました:) – htetmyet