Привет. Я пытался выяснить, почему в этом коде permutations.append (lst) не только добавляется дважды, но и удаляет первый термин в «permutations».
def permute(lst):
permutations = []
permutations.append(lst)
flag = True
while flag:
k = len(lst) - 2
while k>=0:
if lst[k] < lst[k+1]:
break
k -= 1
else:
flag = False
break
l = len(lst) - 1
while l>k:
if lst[k] < lst[l]:
break
l-=1
lst[k], lst[l] = lst[l], lst[k]
lst = lst[:k+1] + lst[len(lst)-1: k :-1]
print('a')
permutations.append(lst)
print(lst, 'b')
return permutations
print(permute([2,3,4,5])
Я разместил команды печати, чтобы проверить, работает ли блок по какой-то причине дважды, но это не так. Вместо того, чтобы заключительные перестановки были вложенными списками всех перестановок в [2,3,4,5] по порядку, это дает:
[[2, 3, 5, 4], [2, 4, 5, 3], [2, 4, 5, 3], [2, 5, 4, 3], [2, 5, 4, 3], [3, 5, 4, 2], [3, 2, 5, 4], [3, 4, 5, 2], [3, 4, 5, 2], [3, 5, 4, 2], [3, 5, 4, 2], [4, 5, 3, 2], [4, 2, 5, 3], [4, 3, 5, 2], [4, 3, 5, 2], [4, 5, 3, 2], [4, 5, 3, 2], [5, 4, 3, 2], [5, 2, 4, 3], [5, 3, 4, 2], [5, 3, 4, 2], [5, 4, 3, 2], [5, 4, 3, 2], [5, 4, 3, 2]]