我有一个字符串python manage.py runserver 168.62.208.14:8000
我需要找到如下的子串: a,b,c,cc,d,dd,ddd,e
子字符串abccddde
或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)]
这是我找到子串的方法,但它给出了所有可能性,但这就是它效率低下的原因 请帮助!
答案 0 :(得分:3)
您可以使用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
输出:
['a', 'b', 'c', 'cc', 'd', 'dd', 'ddd', 'c', 'cc', 'e']
答案 1 :(得分:1)
itertools.groupby可以告诉您连续字符的数量。在此之后,每个组都会重复使用该字符。
from itertools import groupby
def substrings(s):
for char, group in groupby(s):
substr = ''
for i in group:
substr += i
yield substr
for result in substrings('abccdddcce'):
print(result)
答案 2 :(得分:0)
您可以使用collections.Counter()
:
from collections import Counter
L = []
s = 'abccddde'
c = Counter(s) # Counter({'d': 3, 'c': 2, 'a': 1, 'b': 1, 'e': 1})
for k, v in c.items():
for x in range(1, v+1):
L.append(x*k)
Counter(s)
返回一个字典,其中包含字母在字符串中重复的次数。然后我们遍历字典并为一个术语创建所有重复的字符串(' d',' dd' ddd'等)。
答案 3 :(得分:0)
这是使用正则表达式的一种方式:
In [85]: [j for i in re.findall(r'((\w)(\2+)?)', s) for j in set(i) if j]
Out[85]: ['a', 'b', 'c', 'cc', 'ddd', 'dd', 'd', 'e']
答案 4 :(得分:0)
以下将做你想要的。我不知道它与其他解决方案相比是否有效。
def get_all_substrings(text):
res = []
prev = ''
s = ''
for c in text:
if c == prev:
s += c
else:
s = prev = c
res.append(s)
return res
# Output
>>> get_all_substrings('abccddde')
['a', 'b', 'c', 'cc', 'd', 'dd', 'ddd', 'e']
>>> get_all_substrings('abccdddec')
['a', 'b', 'c', 'cc', 'd', 'dd', 'ddd', 'e', 'c']
计时
import timeit
import random
size = 100
values = 'abcde'
s = ''.join(random.choice(values) for _ in range(size))
print(s)
print(timeit.timeit("get_all_substrings(s)",
setup = 'from __main__ import s, get_all_substrings',
number = 10000) )
# Example for size 100 input
abbaaebacddbdedbdbbacadcdddabaeabacdcbeebbccaadebdcecadcecceececcacebacecbbccdedddddabaeeceeeccabdcc
0.16761969871275967
答案 5 :(得分:0)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>