Python如何无需嵌套for循环高效生成字符串所有连续子串
实现方案
你可以直接用Python标准库itertools.combinations实现,无需手写嵌套循环,也不需要额外排序和空值过滤,代码非常简洁:
import itertools text = 'abcd' result = [text[i:j] for i, j in itertools.combinations(range(len(text) + 1), 2)] print(result)
运行输出和你要求的结果完全一致:
['a', 'ab', 'abc', 'abcd', 'b', 'bc', 'bcd', 'c', 'cd', 'd']
思路说明
- 所有连续子串都可以通过左闭右开的起止索引对(i,j) 唯一确定,其中
i < j itertools.combinations(range(len(text)+1), 2)会自动生成所有满足i < j的索引组合,生成顺序刚好匹配你需要的输出顺序,不需要额外排序- 没有冗余计算,也不需要判断空串,是生成所有连续子串的最优实现,时间复杂度为O(n²),和生成的子串总量匹配,没有额外开销
- 如果你不想引入标准库,也可以简化原有嵌套列表推导,去掉冗余判断和排序,性能也会明显提升:
text = 'abcd' result = [text[y:i] for y in range(len(text)) for i in range(y+1, len(text)+1)]
内容的提问来源于stack exchange,提问作者ancient
相关产品推荐
相关产品推荐

