メイン文字列 (すべての長さ) 内のサブ文字列のすべての出現を見つけようとしています。私の関数は 1 つの文字列を取り、すべての部分文字列 (もちろん複数回発生します) の辞書と、それが何回発生するか (辞書の形式: {substring: # of occurrences, ...}
) を返します。私はcollections.Counter(s)
それを手伝うために使用しています。
これが私の機能です:
from collections import Counter
def patternFind(s):
patterns = {}
for index in range(1, len(s)+1)[::-1]:
d = nChunks(s, step=index)
parts = dict(Counter(d))
patterns.update({elem: parts[elem] for elem in parts.keys() if parts[elem] > 1})
return patterns
def nChunks(iterable, start=0, step=1):
return [iterable[i:i+step] for i in range(start, len(iterable), step)]
data
約 2500 のランダムな文字 (ランダムな順序)の文字列があります。ただし、2 つの文字列が挿入されています (ランダム ポイント)。この文字列が「TEST」であるとします。data.count('TEST')
2 を返しpatternFind(data)['TEST']
ますKeyError
。したがって、私のプログラムはその中の 2 つの文字列を検出しません。
私は何を間違えましたか?ありがとう!
編集: テストインスタンスを作成する私の方法:
def createNewTest():
n = randint(500, 2500)
x, y = randint(500, n), randint(500, n)
s = ''
for i in range(n):
s += choice(uppercase)
if i == x or i == y: s += "TEST"
return s