生成列表的扩展列表

时间:2019-04-07 12:17:04

标签: python recursion

我相当确定这是一个递归问题,但我一直在兜圈子,试图找出答案。

我想在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)

那会从单个值中弹出一个列表,但是我该如何递归地生成它(如果正确的话)?

1 个答案:

答案 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)]