我相当确定这是一个递归问题,但我一直在兜圈子,试图找出答案。
我想在n年的过程中生成一个矩阵(列表列表),以查看薪资增长的所有可能结果。
薪水应大于0且小于10000。我想以500为单位递增。
salary_range = range(0,10000)
salary_increment = 500
所以第0年的薪水可能是500,1000,1500 ..... 9500,10000
然后在第1年中,对于上一年的每个值,只要不超过100000,它就可以增加500的倍数。即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)
那会从单个值中弹出一个列表,但是我该如何递归地生成它(如果正确的话)?
答案 0 :(得分:0)
您真的不需要递归。如果您想生成矩阵,只需将2用于循环:
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附加到all_salary的末尾,该对象的末尾是[10000,10000,10000,10000] :
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)
要解决这个问题,我只需用start_salary扩展all_salary,然后按照需要创建列表列表的方式将其切碎:
n = 4
[all_salary[i:i + n] for i in range(0, len(all_salary), n)]