Я пытаюсь создать пару функций, которые, учитывая список «стартовых» чисел, будут рекурсивно добавлять к каждой позиции индекса до определенного максимального значения (почти так же, как одометр работает в автомобиле - каждый счетчик колеблется до 9 перед сбросом на 1 и переносом на следующее колесо).Смешанный рекурсивный список append в Python
код выглядит следующим образом:
number_list = []
def counter(start, i, max_count):
if start[len(start)-1-i] < max_count:
start[len(start)-1-i] += 1
return(start, i, max_count)
else:
for j in range (len(start)):
if start[len(start)-1-i-j] == max_count:
start[len(start)-1-i-j] = 1
else:
start[len(start)-1-i-j] += 1
return(start, i, max_count)
def all_values(fresh_start, i, max_count):
number_list.append(fresh_start)
new_values = counter(fresh_start,i,max_count)
if new_values != None:
all_values(*new_values)
Когда я бегу all_values ([1,1,1], 0,3) и печати number_list, хотя, я получаю:
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1],
[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1],
[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1],
[1, 1, 1], [1, 1, 1], [1, 1, 1]]
Это, к сожалению. Вдвойне так, зная, что, если я заменю первую строку all_values с
print(fresh_start)
я получаю именно то, что я после:
[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 2, 1]
[1, 2, 2]
[1, 2, 3]
[1, 3, 1]
[1, 3, 2]
[1, 3, 3]
[2, 1, 1]
[2, 1, 2]
[2, 1, 3]
[2, 2, 1]
[2, 2, 2]
[2, 2, 3]
[2, 3, 1]
[2, 3, 2]
[2, 3, 3]
[3, 1, 1]
[3, 1, 2]
[3, 1, 3]
[3, 2, 1]
[3, 2, 2]
[3, 2, 3]
[3, 3, 1]
[3, 3, 2]
[3, 3, 3]
Я уже пытался сделать копию fresh_start (путем temp = fresh_start) и добавление этого вместо этого, но без изменения вывода.
Может ли кто-нибудь дать представление о том, что я могу сделать, чтобы исправить мой код? Отзывы о том, как можно упростить эту проблему, также приветствуются.
Большое спасибо!
Большое спасибо за объяснение - неожиданный результат полностью имеет смысл смотреть на него таким образом. Сделал изменения, и код работает! –