Python:填充多维数组
我需要创建一个二维数组,用来存放薪资等级和级别。
salaryGrades = []
salaryStep = 0
salaryInc = 1000
for x in range (0,10):
salaryStep+=100000
salaryGrades.append([salaryStep])
for x in salaryGrades:
salaryInc=+1000
x.append([salaryInc])
print (salaryGrades)
现在这个数组显然不对。我希望每个数组的值增加1万,而每个内部数组的值增加1000。
也就是说,应该是这样的格式:[ [10000],[11000],[12000],...][20000],[21000],[22000],...] 一直到10万。
我该怎么让这个代码正常工作,或者有没有更好的方法?
3 个回答
0
把你的代码改成这样:
for y in range (0,8):
for x in range (0,9):
salaryGrades[y][x] = (y+1)*10000 + x*1000
2
你也可以用一行代码来实现这个功能,使用numpy库。
import numpy as np
print 1000*np.arange(10,100).reshape((9,10))
[[10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000],
[20000, 21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000],
[30000, 31000, 32000, 33000, 34000, 35000, 36000, 37000, 38000, 39000],
[40000, 41000, 42000, 43000, 44000, 45000, 46000, 47000, 48000, 49000],
[50000, 51000, 52000, 53000, 54000, 55000, 56000, 57000, 58000, 59000],
[60000, 61000, 62000, 63000, 64000, 65000, 66000, 67000, 68000, 69000],
[70000, 71000, 72000, 73000, 74000, 75000, 76000, 77000, 78000, 79000],
[80000, 81000, 82000, 83000, 84000, 85000, 86000, 87000, 88000, 89000],
[90000, 91000, 92000, 93000, 94000, 95000, 96000, 97000, 98000, 99000]]
特别是对于大数组,这样做可以加快你的代码运行速度,因为循环的操作是由numpy模块来完成的,而numpy是用C语言写的,速度更快。
3
我会用列表推导式:
>>> salaryGrades = [list(range(s, s + 10000, 1000)) for s in range(10000, 100000, 10000)]
>>> salaryGrades
[[10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000],
[20000, 21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000],
[30000, 31000, 32000, 33000, 34000, 35000, 36000, 37000, 38000, 39000],
[40000, 41000, 42000, 43000, 44000, 45000, 46000, 47000, 48000, 49000],
[50000, 51000, 52000, 53000, 54000, 55000, 56000, 57000, 58000, 59000],
[60000, 61000, 62000, 63000, 64000, 65000, 66000, 67000, 68000, 69000],
[70000, 71000, 72000, 73000, 74000, 75000, 76000, 77000, 78000, 79000],
[80000, 81000, 82000, 83000, 84000, 85000, 86000, 87000, 88000, 89000],
[90000, 91000, 92000, 93000, 94000, 95000, 96000, 97000, 98000, 99000]]