我试图在主字符串(所有长度)中找到所有出现的子字符串。我的函数接受一个字符串,然后返回每个子字符串的字典(当然,它不止一次出现)以及它出现的次数(字典的格式:){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
. 因此,我的程序没有检测到其中的两个字符串。
我做错了什么?谢谢!
编辑:我创建测试实例的方法:
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