2

次のような35000個の値のリストipythonがあるとします。

a = ['235', '2589', '25896']

一致する文字列:

str = '258963548'
str2 = '258954213'
str3 = '258659652'

次に、これらの文字列をリストに一致させて、最も長い一致を見つけたいと思います。最初の文字列の結果は25896になり、2番目の一致は2589を返し、最後に最後の文字列は一致しませんでした。

この問題を解決するために正規表現を使用しましたが、各リストに一致するリストが約50セット、文字列が約200あるため、時間がかかります。

これが私のコードです:

def Matchit(str,b = []):
    pattern = re.compile("(?P<mt>\S*)\S*\s+(?P=mt)")
    ln = 0
    res = -1
    for a in b:
        match = pattern.match(str + ' ' + a).group('mt')
        if (len(match)>ln):
            ln = len(match)
            if(ln>2):
               res = b[a]
   return res

どんな助けでもありがたいです。

4

2 に答える 2

4

リストからトライを作成できます。そうすれば、最も長い一致を非常にすばやく見つけることができるはずです。

ここに画像の説明を入力してください

于 2012-08-11T09:55:15.270 に答える
2

リストを降順で並べ替えると、最初の一致が最も長くなります。このようにして、各反復を最後まで実行する必要はありません。

于 2012-08-11T08:50:57.820 に答える