我有一个字符串 abccddde
我需要找到子串,如:a、b、c、cc、d、dd、ddd、e
子串ab或cd无效。
我尝试从字符串中查找所有子字符串,但效率不高
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']
这是我用来查找子字符串的方法,但它提供了所有的可能性,但这就是它效率低下的原因,请帮助!
您可以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)