Изменение логики в ответе @ Ajax1234 в связанном вопросе, чтобы просто пропустить итерацию цикла for
, если повторение значения в списке _accum
будет выглядеть следующим образом:
def print_sequences(char_list, n, _accum=[]):
if len(_accum) == n:
print(_accum)
else:
for c in char_list:
if c in _accum:
continue
print_sequences(char_list, n, _accum+[c])
print_sequences([1, 2, 3, 4], 4)
В соответствии с этим объяснением комбинаций и перестановок мы можем рассчитать ожидаемое количество результатов, используя 4 !, то есть 24. (Эта же ссылка на странице объясняет, почему 4 4 или 256, - ожидаемое количество результатов в ответе на ваш предыдущий вопрос)
При ответе выше будут распечатаны следующие 24 списка результатов:
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 2, 3]
[1, 4, 3, 2]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 1, 3]
[2, 4, 3, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 1, 2, 3]
[4, 1, 3, 2]
[4, 2, 1, 3]
[4, 2, 3, 1]
[4, 3, 1, 2]
[4, 3, 2, 1]