求字符串集的所有子串,如‘abc’子串‘a’、‘b’、‘c’、‘ab’、‘bc’、‘abc’。现在有思路是对所有字符串按位控制长度进行遍历,判重后再写入列表中。但是如果字符串长度过长,数目过多,循环次数就很多,程序运行不了。希望各位大能门给点建议,谢谢。
求字符串集的所有子串,如‘abc’子串‘a’、‘b’、‘c’、‘ab’、‘bc’、‘abc’。现在有思路是对所有字符串按位控制长度进行遍历,判重后再写入列表中。但是如果字符串长度过长,数目过多,循环次数就很多,程序运行不了。希望各位大能门给点建议,谢谢。
>>> s='abc'
>>> {s[i:i+k]for i in range(len(s)) for k in range(1,len(s)+1)}
{'bc', 'a', 'ab', 'b', 'c', 'abc'}
from itertools import combinations
string = 'abcde'
substring = []
for i in range(1,len(string)+1):
substring.extend(list(combinations(string,i)))
substring = [''.join(i) for i in substring]
都不考虑去重吗?
我给一个去重的版本:
s = 'abcab'
list(set(s[i:i+x] for i, j in enumerate(reversed(range(len(s)+1))) for x in range(1,j+1)))
结果是
['a', 'c', 'b', 'abcab', 'abc', 'bc', 'ca', 'bcab', 'bca', 'ab', 'cab', 'abca']
1 回答9.4k 阅读✓ 已解决
2 回答5.1k 阅读✓ 已解决
2 回答3.4k 阅读✓ 已解决
3 回答4.4k 阅读
2 回答2.4k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
注 不需要去重,因为不会产生重复,而且还很有序,:))
相当于: