首页 > 代码库 > Python学习第二天数组

Python学习第二天数组

1:Python定义数组:a=[0,1,2,3,4] ;   打印数组list(a); 这时:a[0]=0, a[1]=1, a[[2]=2......
1.1:如果想定义一个很长的数组可以用到python函数range a=range(1000)生成1000个元素的一维数组, list(a) 打印数组显示
1.2:给生成的数组赋初始值:a = [0 for x in range(0, 1000)]
       0表示初始值  x表示数组中的元素 range(995,1000)表示从995开始生成到1000,生成5个元素,995和1000并不是表示数组下标
1.3: 如果是range(0,1000)表示生成1000个元素,从0开始。

2.1:二维数组定义:a=[[1,1],[1,1]]  这个可以理解成2*2的格式,即这个二维数组有2个元素,每个元素中包含2个子元素
2.2 生成二维数组: a=[[0 for x in range(10)] for y in range(10)],      
      另外一种写法:b=[[0]*10]*10定义10*10初始为0的二维数组 这个可以理解成10*10的格式,即这个二维数组有10个元素,每个元素中包含10个子元素。
比较:print a==b的结果为True但用b的定义方法代替a后,以前的可以正常运行的程序也出错了,经过仔细分析得出区别:a[0][0]=1时,只有a[0][0]为1,其他全为0。b[0][0]=1时,a[0][0],a[1][0],只到a[9,0]全部为1。由此得到大数组中的10个小的一维数据全是一个相同的引用,即指向同一地址。故 b = [[0]*10]*10并不符合我们常规意义上的二维数组。

同时经过试验:c=[0]*10的定义与c=[0 for x in range(10)]有同样的效果,Python数组 而没有上面相同引用的问题,估计数组c的定义时是值类型相乘,而前面b的用类型的相乘,因为一维数组是一个引用。