python求字符串集的所有子串

求字符串集的所有子串,如‘abc’子串‘a’、‘b’、‘c’、‘ab’、‘bc’、‘abc’。现在有思路是对所有字符串按位控制长度进行遍历,判重后再写入列表中。但是如果字符串长度过长,数目过多,循环次数就很多,程序运行不了。希望各位大能门给点建议,谢谢。

阅读 12k
4 个回答

不需要去重,因为不会产生重复,而且还很有序,:))

>>> s = 'abc'
>>> [s[i:i + x + 1] for x in range(len(s)) for i in range(len(s) - x)]
['a', 'b', 'c', 'ab', 'bc', 'abc']
>>>

相当于:

def cut(s: str):
    results = []
    # x + 1 表示子字符串长度
    for x in range(len(s)):
        # i 表示偏移量
        for i in range(len(s) - x):
            results.append(s[i:i + x + 1])
    return results


print(cut('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']

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏