我有以下字符串:abc
。
我希望得到此数组作为结果:['a','b','c','ab','bc','ca','ba','cb','ac','abc','cab','cba','bac','bca']
我尝试使用itertools.combinations()
,但这并没有给我不同的顺序。
答案 0 :(得分:3)
您可以将递归与生成器一起使用:
def combos(d, c = []):
if len(c) == len(d):
yield ''.join(c)
else:
if c:
yield ''.join(c)
for i in d:
if i not in c:
yield from combos(d, c + [i])
print(list(combos('abc')))
输出:
['a', 'ab', 'abc', 'ac', 'acb', 'b', 'ba', 'bac', 'bc', 'bca', 'c', 'ca', 'cab', 'cb', 'cba']
如果您希望保留订单,则可以使用sorted
:
result = sorted(list(combos('abc')), key=lambda x:[len(x), x])
输出:
['a', 'b', 'c', 'ab', 'ac', 'ba', 'bc', 'ca', 'cb', 'abc', 'acb', 'bac', 'bca', 'cab', 'cba']
答案 1 :(得分:3)
您可以使用itertools.permutations
来完成
>>> s = 'abc'
>>> from itertools import permutations
>>> [w for i in range(len(s)) for w in map(''.join, (permutations('abc', i+1)))]
['a', 'b', 'c', 'ab', 'ac', 'ba', 'bc', 'ca', 'cb', 'abc', 'acb', 'bac', 'bca', 'cab', 'cba']