如何从python中的字符串中找到连续的子字符串

7 python python-3.x

我有一个字符串 abccddde

我需要找到子串,如:a、b、c、cc、d、dd、ddd、e

子串abcd无效。

我尝试从字符串中查找所有子字符串,但效率不高

def get_all_substrings(input_string):
    length = len(input_string)
    return [input_string[i:j+1] for i in range(length) for j in range(i,length)]
Run Code Online (Sandbox Code Playgroud)

这是输出:

['a', 'ab', 'abc', 'abcc', 'abccd', 'abccdd', 'abccddd', 'abccddde', 'b', 'bc', 'bcc', 'bccd', 'bccdd', 'bccddd', 'bccddde', 'c', 'cc', 'ccd', 'ccdd', 'ccddd', 'ccddde', 'c', 'cd', 'cdd', 'cddd', 'cddde', 'd', 'dd', 'ddd', 'ddde', 'd', 'dd', 'dde', 'd', 'de', 'e']

这是我用来查找子字符串的方法,但它提供了所有的可能性,但这就是它效率低下的原因,请帮助!

MYG*_*YGz 4

您可以itertools.groupby()为此使用:

from itertools import groupby

s = 'abccdddcce'
l1 = ["".join(g) for k, g in groupby(s)]
l2 = [a[:i+1] for a in l1 for i in range(len(a))]
print l2
Run Code Online (Sandbox Code Playgroud)

输出:

['a', 'b', 'c', 'cc', 'd', 'dd', 'ddd', 'c', 'cc', 'e']
Run Code Online (Sandbox Code Playgroud)

对于更大的输入数据,用生成器替换列表,

l1=()
l2=()
Run Code Online (Sandbox Code Playgroud)