Поскольку вопрос вы связаны состояния, itertools.permutations решение для генерации перестановок списков. В python строки можно рассматривать как списки, поэтому itertools.permutations("text")
будет работать нормально. Для подстрок вы можете передать длину в itertools.permutations как необязательный второй аргумент.
def permutate_all_substrings(text):
permutations = []
# All possible substring lengths
for length in range(1, len(text)+1):
# All permutations of a given length
for permutation in itertools.permutations(text, length):
# itertools.permutations returns a tuple, so join it back into a string
permutations.append("".join(permutation))
return permutations
Или, если вы предпочитаете один строки списковых
list(itertools.chain.from_iterable([["".join(p) for p in itertools.permutations(text, l)] for l in range(1, len(text)+1)]))
Возможный дубликат: http://stackoverflow.com/questions/12273688/algorithm-to-generate-permutations-of-a-list -of-strings-and-their-substrings – bdean20