我的序列很长,我想知道这个序列中某些子序列出现的频率。
我知道string.count(s,sub),但它只计算非重叠序列。
是否存在类似功能(也可以计算重叠序列)?
作为编写自己的搜索功能的替代方法,可以使用以下re模块:
re
In [22]: import re In [23]: haystack = 'abababa baba alibababa' In [24]: needle = 'baba' In [25]: matches = re.finditer(r'(?=(%s))' % re.escape(needle), haystack) In [26]: print [m.start(1) for m in matches] [1, 3, 8, 16, 18]
上面打印了所有(可能重叠的)匹配的起始位置。
如果您只需要计数,就可以使用以下方法:
In [27]: len(re.findall(r'(?=(%s))' % re.escape(needle), haystack)) Out[27]: 5