Python中的list是一个可变长可随机访问的对象,如果我们需要得到一个定长的数组,可以使用list来模拟。
1. 一维数组
长度为4的一维数组
>>> array_d1=[ 0 for i in range(4) ]
>>> array_d1
[0, 0, 0, 0]
>>> array_d1[3]=3
>>> array_d1
[0, 0, 0, 3]
2.二维数组
第一维长度为3,第二维为4
>>> array_d2=[ [ 0 for j in range(4) ] for i in range(3) ]
>>> array_d2
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> array_d2[0][3]=1
>>> array_d2
[[0, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0]]
3.三维数组
>>> array_d3=[ [ [ 0 for k in range(4) ] for j in range(3) ] for i in range(2) ]
>>> array_d3
[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]
>>> array_d3[1][2][1]=1
>>> array_d3
[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 0, 0]]]
同理,可创建任意高维的数组。个人认为,3维以上的数组就难以理解了。
使用list来模拟数组的有个问题是赋值不当可能会毁坏数组的结构:
如:array_d2 是二维数组,如果不慎赋值 array_d2[0]=10 ,那么array_d2就不能再模拟二维数组。
python这个特性也有很大优点,可以使用list来创建所谓的 ragged array
如:打印99乘法表
>>> array_rag=[ [] for i in range(9) ]
>>> for i in range(1,10):
... array_rag[i-1]=[ "%2d * %2d = %2d"%(j,i,i*j) for j in range(1,i+1) ]
...
>>> for i in range(9):
... print array_rag[i]
[' 1 * 1 = 1']
[' 1 * 2 = 2', ' 2 * 2 = 4']
[' 1 * 3 = 3', ' 2 * 3 = 6', ' 3 * 3 = 9']
[' 1 * 4 = 4', ' 2 * 4 = 8', ' 3 * 4 = 12', ' 4 * 4 = 16']
[' 1 * 5 = 5', ' 2 * 5 = 10', ' 3 * 5 = 15', ' 4 * 5 = 20', ' 5 * 5 = 25']
[' 1 * 6 = 6', ' 2 * 6 = 12', ' 3 * 6 = 18', ' 4 * 6 = 24', ' 5 * 6 = 30', ' 6 * 6 = 36']
[' 1 * 7 = 7', ' 2 * 7 = 14', ' 3 * 7 = 21', ' 4 * 7 = 28', ' 5 * 7 = 35', ' 6 * 7 = 42', ' 7 * 7 = 49']
[' 1 * 8 = 8', ' 2 * 8 = 16', ' 3 * 8 = 24', ' 4 * 8 = 32', ' 5 * 8 = 40', ' 6 * 8 = 48', ' 7 * 8 = 56', ' 8 * 8 = 64']
[' 1 * 9 = 9', ' 2 * 9 = 18', ' 3 * 9 = 27', ' 4 * 9 = 36', ' 5 * 9 = 45', ' 6 * 9 = 54', ' 7 * 9 = 63', ' 8 * 9 = 72', ' 9 * 9 = 81']