Хорошо. Я пишу алгоритм, чтобы показать мне все перестановки в списке целых чисел. Но во время выполнения алгоритма у меня возникла проблема с добавлением перестановочного списка в мой список результатов.
Код - это алгоритм кучи. Я получил законченную перестановку, когда size == 1
. Таким образом, я могу добавить переставленный список V
в мой окончательный список res
. Вот код:
Функция для перестановки списка
def permutations(V, size):
global res
if size == 1:
print(V)
res.append(V)
for i in range(0, size):
permutations(V, size-1)
if size % 2 == 1:
V[size-1], V[0] = V[0], V[size-1]
else:
V[i], V[size-1] = V[size-1], V[i]
A = [1,2,3]
res = []
permutation(A, len(A))
print(res)
И это вывод:
[1, 2, 3]
[2, 1, 3]
[3, 1, 2]
[1, 3, 2]
[2, 3, 1]
[3, 2, 1]
res: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
Печатные перестановки V верны. Но список V, добавленный к моему global res
, не изменился. Они добавляются сразу после печати, а список добавляется иначе.
Если вы измените строки следующим образом:
res.append(V)
|
|
v
D = [V[i] for i in range(len(V))]
res.append(D)
Результаты верны в финале. Любой человек может объяснить, как распечатанный список может отличаться от добавленного списка с помощью той же переменной.