分享

Python List模拟数组

 dinghj 2013-11-20
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']

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多