我见过很多关于获取所有可能的子字符串(即相邻的字符集)的问题,但没有关于生成所有可能的字符串(包括其子字符串的组合)的问题。
例如,让:
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
轻松完成此操作
>>> from itertools import combinations
>>> x = 'abc'
>>> [''.join(l) for i in range(len(x)) for l in combinations(x, i+1)]
['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']
如果你想以相反的顺序返回它,你可以让 range
函数以相反的顺序返回它的序列
>>> [''.join(l) for i in range(len(x),0,-1) for l in combinations(x, i)]
['abc', 'ab', 'ac', 'bc', 'a', 'b', 'c']
关于python - 获取字符串及其子字符串的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51538192/