Ваш ожидаемый результат не содержит всех возможных перестановок, поэтому не уверен, что это то, что вы хотите, или вы пропустили некоторые из них. Но, чтобы получить все возможные перестановки списка разной длины, вы можете сделать следующее:
from itertools import permutations
a_list = [1,2,3]
perm_list = [p for l in range(1, len(a_list)+1) for p in permutations(a_list,l)]
print(perm_list)
Результат:
[(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)]
Если список входных велик, хотя, возможно, было бы лучше использовать выражение генератора, например
perm_list_gen = (p for l in range(1, len(a_list)+1) for p in permutations(a_list,l))
print(perm_list_gen)
#prints: <generator object <genexpr> at 0x7f176bbd88b8>
И чем просто пойти по одному, а не все сразу:
for perm in perm_list_gen:
print(perm)
Вы намеренно исключая перестановки, такие как [2,1 ], [3,1], [3,2]? – mhawke