【发布时间】:2018-07-26 11:51:46
【问题描述】:
我见过很多关于获取所有可能的子字符串(即相邻字符集)的问题,但没有看到关于生成所有可能的字符串(包括其子字符串的组合)的问题。
例如,让:
x = 'abc'
我希望输出类似于:
['abc', 'ab', 'ac', 'bc', 'a', 'b', 'c']
重点是我们可以去掉原字符串中不相邻的多个字符(以及相邻的)。
这是我迄今为止尝试过的:
def return_substrings(input_string):
length = len(input_string)
return [input_string[i:j + 1] for i in range(length) for j in range(i, length)]
print(return_substrings('abc'))
但是,这只会从原始字符串中删除相邻字符串的集合,并且不会返回上例中的元素 'ac'。
另一个例子是如果我们使用字符串'abcde',输出列表应该包含'ace'、'bd'等元素。
【问题讨论】:
-
你真的想以艰难的方式做到这一点吗?使用标准的
itertools.combinations函数很容易做到,而且运行速度也更快。 -
这基本上是
whats a good way to find power_set的字符串版本。 stackoverflow.com/questions/1482308/… -
这些是组合,而不是“迭代”。组合基本上是顺序无关紧要的子集。如果顺序很重要,那就是排列。
-
@MikeHousky 谢谢指正,我改一下标题。
-
如果您想处理像
"AAAA"这样的字符串并且没有不必要的重复,请查看我的答案。