0

Python を使用して、文字列 (A) 内の 3 つの連続した文字が別の文字列 (B) にも含まれているかどうかを確認するにはどうすればよいですか? Pythonに組み込み関数はありますか?

例:

A = FatRadio
B = fradio

3 のしきい値を定義したと仮定すると、A にも含まれる B に 3 つの連続する文字があるため、Python スクリプトは true を返す必要があります (これは 4 および 5 つの連続する文字にも当てはまることに注意してください)。

4

3 に答える 3

2

モジュールを使用できdifflibます:

import difflib

def have_common_triplet(a, b):
    matcher = difflib.SequenceMatcher(None, a, b)
    return max(size for _,_,size in matcher.get_matching_blocks()) >= 3

結果:

>>> have_common_triplet("FatRadio", "fradio")
True

ただしSequenceMatcher、最初の共通のトリプレットを見つけるよりもはるかに多くのことを行うことに注意してください。したがって、単純なアプローチよりもはるかに多くの時間がかかる可能性があります。より簡単な解決策は次のとおりです。

def have_common_group(a, b, size=3):
     first_indeces = range(len(a) - len(a) % size)
     second_indeces = range(len(b) - len(b) % size)
     seqs = {b[i:i+size] for i in second_indeces}
     return any(a[i:i+size] in seqs for i in first_indeces)

特に一致が文字列の先頭にある場合は、どちらのパフォーマンスが向上するはずです。

于 2013-08-13T12:58:32.837 に答える
2

これはどう?

char_count = 3 # Or whatever you want
if len(A) >= char_count and len(B) >= char_count :
    for i in range(0, len(A) - char_count + 1):
        some_chars = A[i:i+char_count]
        if some_chars in B:
            # Huray!
于 2013-08-13T12:24:33.383 に答える
1

このための組み込み関数については知らないので、最も単純な実装は次のようになると思います。

a = 'abcdefgh'
b = 'foofoofooabcfoo'

for i in range(0,len(a)-3):
  if a[i:i+3] in b:
    print 'then true!'

これは次のように短縮できます。

search_results = [i for in range(0,len(a)-3) if a[i:i+3] in b]
于 2013-08-13T12:45:13.093 に答える