#python #recursion
#python #рекурсия
Вопрос:
Я совершенно уверен, что это проблема рекурсии, но я ходил по кругу, пытаясь разобраться в этом.
Я хотел бы сгенерировать матрицу (список списков) в течение n лет, чтобы посмотреть на все возможные результаты роста заработной платы.
Зарплата должна быть больше 0 и меньше 10000. Я хочу увеличить количество блоков по 500.
salary_range = range(0,10000)
salary_increment = 500
Таким образом, в 0 году зарплата может составлять 500,1000,1500 …..9500,10000
Затем в год 1 для каждого значения предыдущего года оно может увеличиваться кратно 500, если оно составляет менее 100000. т. е. 1000 500*0, 1000 500*1….
Это будет делать это в течение n лет
В конце я хотел бы надеяться получить список списков списков, в котором вложенный список содержит n элементов, каждый из которых представляет зарплату на данный момент времени.
например
[
[0,0,0,0]
[0,0,0,500]
[0,0,0,1000]
.........
[10000,10000,10000,9500]
[10000,10000,10000,10000]
]
Я решил, что способ генерации приращений будет выглядеть так
def nextone(pv):
global salary_max
salary_increment = 500
next_vals = []
for i in range(0,n):
nv = pv i*salary_increment
next_vals.append(nv)
Это выдает список из одного значения, но как я могу сгенерировать это рекурсивно (если это правильно)?
Ответ №1:
Вам действительно не нужна рекурсия. Если вы хотите сгенерировать матрицу, просто используйте 2 цикла for:
all_salary = []
start_salary = [0,0,0,0]
for i in range(3, -1, -1):
for salary in range(0, 10001, 500):
start_salary[i] = salary
print(start_salary)
дает нам
[0, 0, 7500, 10000]
[0, 0, 8000, 10000]
[0, 0, 8500, 10000]
[0, 0, 9000, 10000]
[0, 0, 9500, 10000]
[0, 0, 10000, 10000]
[0, 0, 10000, 10000]
[0, 500, 10000, 10000]
[0, 1000, 10000, 10000]
[0, 1500, 10000, 10000]
[0, 2000, 10000, 10000]
[0, 2500, 10000, 10000]
обратите внимание, что мы получаем [0, 0, 10000, 10000]
дважды, один в конце второго цикла и один в начале первого.
Затем нам нужно сохранить их в один объект, но приведенный ниже код дает нам список списков, полный 10000, потому что он добавляет один и тот же объект start_salary , который в конечном итоге равен [10000, 10000, 10000, 10000] для all_salary:
all_salary = []
start_salary = [0,0,0,0]
for i in range(3, -1, -1):
for salary in range(0, 10001, 500):
start_salary[i] = salary
print(start_salary)
all_salary.append(start_salary)
Чтобы обойти это, я просто расширяю all_salary с помощью start_salary, а затем измельчаю его так, как мне нужно для создания списка списков:
n = 4
[all_salary[i:i n] for i in range(0, len(all_salary), n)]
Комментарии:
1. Спасибо, это интересно посмотреть. Я попробовал другой способ добавления
all_salary.append(eval(str(start_salary)))
Не могли бы вы сказать мне, почему вы настроили его на обратную работу?2. @Charlie что вы имеете в виду под «заставить его работать в обратном направлении»?