一尘不染

如何使用Python查找字符串中的重叠序列数?

python

我的序列很长,我想知道这个序列中某些子序列出现的频率。

我知道string.count(s,sub),但它只计算非重叠序列。

是否存在类似功能(也可以计算重叠序列)?


阅读 253

收藏
2020-12-20

共1个答案

一尘不染

作为编写自己的搜索功能的替代方法,可以使用以下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
2020-12-20