(共12张PPT)
2.1.2 二维数组
1 10 11 20 21
2 9 12 19 22
3 8 13 18 23
4 7 14 17 24
5 6 15 16 25
5行5列
方阵
二维数组的概念
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。
二维数组又称为矩阵,行列数相等的矩阵称为方阵。
二维数组的特性
数组的存储方法是顺序存储,每个元素在存储器中占用的
空间大小相同。
“按行优先”存储二维数组时,8所在的位置表示为:a[2][1],在整个数组第12个位置。
“按列优先”存储二维数组时,8所在的位置表示为:a[1][2],在整个数组第8个位置。
按“行优先顺序”存储二维数组时,需要知道它的最大列数。若二维数组
第一个元素存放的位置为LOC(a[0][0]),最大列数为C,每个元素占用的
空间大小为s,则元素a[i][j]的存放位置为:
LOC(a[i][j])=LOC(a[0][0])+(i*C+j)*s
按“列优先顺序”存储二维数组时,需要知道它的最大行数R。元素
a[i][j]的存放位置为:
LOC(a[i][j])=LOC(a[0][0])+(j*R+i)*s
二维数组的基本操作
1.二维数组的创建
①python中创建二维数组的方式比较特殊,不能使用如同一维数组的方式创建。
例如,创建一个3行4列的二维数组,其初始化元素值均为0,代码如下:
a=[[0,0,0,0],[0,0,0,0],[0,0,0,0]]
②python中可以使用列表生成式来创建二维数组,代码如下:
a=[[0 for i in range(4)]for j in range(3)]
也可以写成a=[[0]*4 for i in range(3)]。但不能写成a=[[0]*4]*3
a=[[0]*4]*3表示对一行数据0的3次引用,3行中同一列的数据会同时被修改。
2.二维数组元素的访问
数组元素的访问指的是寻址到特定的数据元素,并根据存储地址对该
数据元素进行读取、修改等操作。二维数组的行、列下标均从0开始,
即a[0][0]表示数组的第一个元素。若用二维数组a来存储矩阵,则第
i行第j列的元素表示为a[i-1][j-1]。
a=[[i*i for i in range(5)]for j in range(5) ]
for i in range(5):
for j in range(5):
print(a[i][j])
比如下面这段代码能实现将二维数组中的每个数据输出:
应用演练
随机生成由95-100以内的整数构成的5行5列矩阵,经过编程实现该矩阵的
行列置换,大家想一想这个代码该怎么实现?
98 97 99 96 96
98 98 99 98 97
95 100 95 98 96
96 100 98 97 98
97 97 100 97 98
98 98 95 96 97
97 98 100 100 97
99 99 95 98 100
96 98 98 97 97
96 97 96 98 98
练 习
1.二维数组a中,每个元素所占空间大小为8个字节,行下标i从0到5,
列下标j从0到9,从首地址SA开始连续存放在存储器内,该数组按行存
放时,元素a[2][3]的起始地址为:
A.SA+160 B.SA+136 C.SA+184 D.SA+168
C
2.有如下python 程序段:
a=[0]*6
b=a[:]
b[3]=8
则程序执行后,a[3]的值为:
A.0 B.3 C.6 D.8
A
3.有如下python程序段:
a=[[i+1 for i in range(4)]for j in range(3)]
for i in range(3):
for j in range(4):
a[i][j]=a[i][j]+4*i
则程序执行后,a[1][2]的值为:
A.2 B.4 C.7 D.8
C
4.有如下python程序段:
a=[[0]*3 for i in range(4)]
for i in range(len(a)):
for j in range(len(a[0])):
a[i][j]=i*len(a[0])+j+1
则程序执行后,a[2][2]的值为:
A.5 B.6 C.8 D.9
D
5.小刚将我国部分省会城市及其对应的市花存储到二维数组中,并依次输
出各省会城市名及其市花,例如:杭州的市花是桂花。相关代码如下:
a=[[“杭州市”,“桂花”],[“广州市”,“木棉”],
[“郑州市”,“月季”],[“武汉市”,“梅花”],
[“长沙市”,“杜鹃”],[“济南市”,“荷花”]]
for i in a:
print(f”{ ① }的市花是{ ② }”)
则划线①和②处分别应填写的代码为
A.①p[1];②p[0] B.①p[0];②p[1]
C.①a[p][0];②a[p][1] D.①p[1];②p[2]
B
6.有如下python程序段:
n=4
a=[[j*n+i+1 for i in range(n)]for j in range(n)]
for i in range(1,n,2):
for j in range(n//2):
a[i][j],a[i][n-j-1]=a[i][n-j-1],a[i][j]
则程序执行后,a[1][1]和a[2][1]的值分别为:
A.6和10 B.7和10 C.6和11 D.7和11
B
谢 谢