1、2.2.1 一维数组情境展示学校抽取50名学生进行身体检查,现要对这50名学生的身高、体重等信息进行存储。请问最适合的是哪种数据结构?为什么?数组的概念与特性1.数组的概念数组是由相同类型的变量构成的一个序列。数组使用一个标识符(数组名)命名,并用编号(下标或索引)区分数组内的各个变量。由数组名和下标组成数组的各个变量称为数组的分量,也称为数组元素。2.数组的特性(1)数组元素的数据类型相同(2)通过数组名和下标对数组元素的值进行访问(3)存储空间固定不变3.array模块array模块是python中一种高效的数组存储类型。它和list相似,但是所有的数组成员必须是同一种类型,在创建数组的时
2、候,就确定了数组的类型。数组的基本操作1.数组的创建数组的创建实质是在系统内划分一块连续区域,用来保存数组所含的所有数据元素。在python中使用列表来模拟数组,其所占空间大小可以用内置函数len()来获取。创建数组的两种方法:1.直接定义 s=0*9 print(s)0,0,0,0,0,0,0,0,02.列表生成式 s=0 for i in range(9)print(s)0,0,0,0,0,0,0,0,02.数组元素的访问数组元素的访问指的是寻址到特定的数据元素,并根据存储地址对该数据元素进行读取、修改等操作。由于数组元素可以通过下标和数组名快速确定数据元素的内存地址,因此可以通过数组名和
3、下标直接进行访问。第一个数据元素的下标为0。例如,print(a2)表示将一维数组a中第3个元素的值进行输出。数组的存储方法是顺序存储,每个元素在存储器中占用的空间大小相同。若第一个元素存放的位置是LOC(0),每个元素占用的空间大小为s,则元素ai的存放位置为:LOC(i)=LOC(0)+s*i任给一个i,可以很快计算出LOC(i)。3.数组元素的插入(1)当需要在数组中某个位置插入一个新的数据时,必须先将该位置及其后的所有数据向后移动一个位置,在保证顺序不变的前提下保存这些数据,最后再修改该位置上的数据为新数据。例:已知数组a所占空间为len(a),其元素个数(实际长度)为n,当nlen(
4、a)时,在数组a的下标p处插入一个新元素x的代码如下:for i in range(n,p,-1):ai=ai-1ap=xn+=1 Python列表提供了insert()方法将指定对象插入到列表的指定位置。其语法格式为list.insert(p,x),其中参数p表示对象x需要插入的索引位置,该方法没有返回值。例:a=1,2,4,5,6执行a.insert(2,3)后,a=1,2,3,4,5,64.数组元素的删除要删除数组中的某个元素,只需将其后的所有元素依次向前移一位,然后将数组长度减一即可。通常记录数组的实际长度为n,删除元素后,只让n减1,而不改变数组所占空间。举例:已知数组a的实际长度为
5、n,将其下标为p的元素删除,代码如下:for i in range(p,n-1):ai=ai+1n-=1 Python列表提供了pop()方法来移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。其语法格式为list.pop(p=-1),其中参数p表示要移除列表元素的索引值,不能超过列表总长度,默认p=-1,删除列表的最后一个元素。该方法返回从列表中移除的元素对象。使用del语句来删除列表中的元素,例如del ap表示删除列表a中下标为p的元素;del a:表示删除列表a中的所有元素,结果使得a=;del a表示删除列表a,使之从内存中消失。一维数组的应用用python语言实现两个有
6、序数组的合并,程序如下:from random import randinta=0*20b=0*15c=0*35a0=randint(95,100)for i in range(1,20):ai=ai-1-randint(1,5)b0=randint(95,100)for i in range(1,15):bi=bi-1-randint(1,5)print(“原始数据序列一为:”)print(a)print(“原始数据序列二为:”)print(b)原始数据序列一为:99,97,95,94,90,87,83,79,78,73,71,69,67,66,61,60,56,55,52,51原始数据序列
7、二为:99,96,94,91,90,88,87,82,80,79,75,73,70,66,62i=0j=0k=0While(i20 and j=bj:ck=ai i=i+1 k=k+1 else:ck=bj j=j+1 k=k+1While i20:ck=ai i=i+1 k=k+1While j15:ck=bj j=j+1 k=k+1Print(“合并后的数据序列为:”)Print(c)合并后的数据序列为:99,99,97,96,95,94,94,91,90,90,88,87,87,83,82,80,79,79,78,75,73,73,71,70,69,67,66,66,62,61,60,5
8、6,55,52,51练一练1.下列实例中的数据不适合使用数组来存储的是:A.全班所有同学的身体信息B.妈妈在账本上记录每个月的家庭收支情况C.小明规划暑假自驾游路线,并根据家人建议对其进行了多次修改D.评委给参加校园歌手大赛的选手打分C2.一个数组第一个元素的存储位置是1000(表示在第1000个字节处),每个元素所占空间大小为8个字节,则第5个元素的位置是:A.1000 B.1040 C.1032 D.1256C3.有如下python程序段:a=0*9n=5for i in range(n):ai=2*i+1print(a)p=3x=6for i in range(n-1,p-1,-1):a
9、i+1=aiap=x则程序执行后,a3和an的值分别为:A.7和9 B.6和9 C.7和0 D.6和0B4.在一个长度为n的数组中删除第i个元素(1=i=n)时,需向前移动的元素个数为:A.i B.n-i C.n-i+1 D.n-i-1 B5.有如下python程序段:import randomflag=False*10a=0*6i=0while i6:ai=random.randint(1,9)if not flagai:flagai=True i+=1则程序执行后,数组a的值可能是A.8,3,6,4,1,5 B.1,2,3,0,4,9 C.2,3,9,5,2,1 D.8,5,6,7,4,8A