Поскольку вы хотите иметь все перестановки в списке с номерами от 0 до n-1, у вас уже есть четкие шаги, которые необходимо предпринять:
- Создать список, содержащий все числаот 0 до n-1:
Это легко сделать с помощью встроенной функции range()
, поскольку она в основном используется именно для этой цели:
диапазон (стоп)
Это универсальная функция для создания итераций, дающая арифметические прогрессии.
Вычислите количество перестановок, которые будет иметь такой список:
Математика говорит нам, что, имея N элементов, будет N!различные сочетания этих элементов, где ! означает факториал.Мы можем импортировать факториальную функцию из математического модуля, которая быстро позволит нам вычислить количество перестановок, которые будут иметь ваш список:
from math import factorial
print(factorial(4)) # 24
Вызовите свою функцию
next_permutation(p)
, которую вы уже много раз написали, и получите каждую и каждую перестановку.
To вернуть что-то более одного раза из функции, вы можетеиспользуйте yield insted.
Имея в виду эти шаги, вы можете создать нечто похожее на это:
def all_permutations(n):
# Constructing a list that contains all numbers from 0 to n-1
integer_list = list(range(n))
# Calculating the amount of permutations such list would have
permutation_count = factorial(n)
# Output that many permutations
for _ in range(permutation_count):
yield integer_list
integer_list = next_permutation(integer_list)
Эта функция генератора выдаст все перестановки списка, содержащегочисла от 0 до n-1, это именно то, что вам нужно.
Чтобы создать список, который будет содержать все перестановки, вы можете написать что-то простое, например:
n = 4
all_permutations = list(all_permutations(n))