Я построил следующую функцию Python, которая печатает перестановки на наборах произвольной длины. Входами в функцию являются начальный индекс набора (а), конечный индекс набора (б) и набора (например, [1,2,3]), а выход - [[1,2,3], [ 1,3,2], ...]. Функция, написанная ниже, печатает результаты, но мне нужна функция, которая «возвращает» результаты.
def backtracking (a, b, seed):
if a == b:
print(seed)
else:
for i in range(a, b+1):
seed[a], seed[i] = seed[i], seed[a]
backtracking(a + 1, b, seed)
seed[a], seed[i] = seed[i], seed[a]
nums = [1,2,3]
backtracking(0,len(nums) - 1,list(nums))
Код здесь представляет собой попытку вернуть результат, но вывод находится в форме [ 1,2,3,1,3,2, ...], тогда как я хочу [[1,2,3], [1,3,2], ...]. Я могу легко преобразовать результат позже, но я хотел бы получить чистое решение, которое напрямую выводит желаемый результат из функции. Я также попытался изменить строку 3 следующим образом: output + = [seed], и в результате получился просто повторный список [1,2,3]. Аналогично для output.append (seed). Почему output.append (seed) не добавляется к выводу должным образом, и как я могу это сделать? Любая помощь в решении этой проблемы будет принята с благодарностью.
def backtracking (a, b, seed, output):
if a == b:
output += seed
else:
for i in range(a, b+1):
seed[a], seed[i] = seed[i], seed[a]
backtracking(a + 1, b, seed, output)
seed[a], seed[i] = seed[i], seed[a]
return(output)
nums = [1,2,3]
backtracking(0,len(nums) - 1,list(nums),[])