Я уверен, что это дубликат, но я не могу найти хорошего.itertools.permutations
делает то, что вы хотите, когда вы перебираете все желаемые длины:
from itertools import permutations, chain
lst = [1,2,3]
list(chain(*(permutations(lst, n) for n in range(1, len(lst)+1))))
# [(1,), (2,), (3,), (1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2), (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
или:
for p in chain(*(permutations(lst, n) for n in range(1, len(lst)+1))):
print(''.join(map(str, p)))
1
2
3
12
13
21
23
31
32
123
132
213
231
312
321