资源简介 一、 数组及其基本操作1. 数组的概念(1)数组在内存中的存储方式为顺序存储。(2)数组是由相同类型的变量构成的一个序列。(3)数组名和下标组成数组的各个变量称为数组的分量,也称为数组元素。(4)创建数组时,系统会在内存中分配一块连续的存储空间,每个数组元素按照下标顺序存储。(5)一维数组:只有一个下标,下标用来表示数据元素在该序列中的位置。(6)二维数组:有两个下标,表示数据元素在该序列中的行、列位置,二维数组有行优先存储和列优先存储两种方式。2. 数组的特性(1)数组元素的数据类型相同。(2)通过数组名和下标对数组元素的值进行访问。(3)存储空间固定不变。归纳总结数组在创建时就分配好了存储空间,即其占用空间已固定,因此删除数组中的元素后,其占用的空间不变。3. 数组的基本操作(1)数组的创建。数组的创建实质是在系统内存中划分一块连续区域,用来保存数组所含的所有数据元素。(2)数组元素的访问。①数组元素的访问,指的是寻址到特定的数据元素,并根据存储地址对该数据元素进行读取、修改等操作。②数组元素可以通过数组名和下标直接进行访问。(3)数组元素的插入与删除。①当数组中某个位置要插入一个新数据时,必须先将该位置及后面的所有数据向后移动一个位置,然后将新数据插入。例如,在数组元素a[1]前插入一个新数据datax,操作后的数组a如图所示。②删除数组元素时,需要将被删除元素位置后的所有元素前移一个位置。例如,删除数组元素a[1]后的数组如图所示。4. Python列表常用函数和方法在Python中,常用列表来模拟实现数组的操作。Python列表常用函数和方法函数和方法 功能 实例len(list1) 统计列表list1中元素的个数 list1=[1,2,3,4] print(len(list1)),输出为4list1.append(x) 在列表list1末尾添加元素x list1=[1,2,3,4] list1.append(5) 列表中的内容为[1,2,3,4,5]list1.insert(i,x) 在列表list1中下标为i位置处插入元素x list1=[1,2,3,4] list1.insert(2,5) 列表中的内容为[1,2,5 3,4]list1.pop(i) 将列表list1中下标为i的元素删除;若i不指定,默认为-1,即删除最后一个元素 list1=[1,2,3,4] list1.pop() 列表中的内容为[1,2,3]【例1】 (2024·浙江1月选考)数组元素a[0]至a[n-1]依次存放着n个数据,现需要将元素a[n-1]插入在下标为x(0≤xtemp=a[n-1]for i in range(n-2,x-1,-1):a[x]=tempA. a[i+1]=a[i] B. a[i-1]=a[i]C. a[i]=a[i+1] D. a[i]=a[i-1]【解析】 本题考查数组元素的移动操作。此算法实现的功能是将数组末尾元素a[n-1]移动到指定位置x。因此需要将下标位置范围为[x,n-2]区间内的元素整体向后移动一位。具体方式如下:元素值 0 3 4 6 7下标 x n-1初始化元素值 0 3 4 6 6下标 x n-1第1步:将6向后移一位覆盖7元素值 0 3 4 4 6下标 x n-1第2步:将4向后移一位覆盖6此时下标x所对应的位置空出,可以插入a[n-1]:元素值 0 3 7 4 6下标 x n-1第3步:将7插入下标x处因此移位的方向是前面的元素覆盖后面的元素,且参与移位的元素最左侧为下标x。【例2】 (2024·浙江6月选考)某监控设备可定时采集红绿信号灯的状态数据,数据格式记为[a,b],其中a、b分别为红灯和绿灯的状态值,0表示灯灭,1表示灯亮,如[0,1]表示红灯灭、绿灯亮。现要编写程序,每隔1秒采集并检测信号灯是否存在如下异常状态:第一类,红绿灯同时亮或同时灭;第二类,红灯或绿灯超时,即保持同一状态的时长大于上限值(如300秒)。检测到异常状态时就发送相应信息。请回答下列问题:(1)若检测到“红绿灯同亮”的异常,则采集到的数据是 D (单选,填字母)。 A. [0,0] B. [0,1]C. [1,0] D. [1,1](2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。tlimit = 300 # 设置信号灯保持同一状态的时长上限值pre = [-1,-1]t = [0,0] # t[0]、t[1]分别记录红灯、绿灯保持同一状态的时长while True: # 接收一次采集到的状态数据,存入d,代码略 if ① d[0]==d[1] : if d[0] == 1: # 发送“红绿灯同时亮”信息,代码略 else: # 发送“红绿灯同时灭”信息,代码略 for i in ② range(2)或range(len(pre))或range(len(d)) : if d[i] == pre[i]: t[i]+= 1 if ③ t[i]>tlimit : if i == 0: # 发送“红灯超时”信息,代码略 else: # 发送“绿灯超时”信息,代码略 else: t[i] = 1 pre = d # 延时1秒,代码略【解析】 本题考查Python程序设计。(1)根据题意0表示灯灭,1表示灯亮可知,红绿灯同时亮需表示为[1,1],D正确。(2)程序①处需判断红绿灯是否处于相同状态,若d[0]和d[1]的值相等,同时d[0]=1,表示红绿灯同时亮;否则d[0]=0,表示红绿灯同时灭,故①处代码为“d[0]==d[1]”。②处相关代码的功能为读取一次数据存列表d后需遍历d,故i取值01,故②处代码为“range(2)”。若d[i]=pre[i],表示i所对应的红绿灯相邻两个时刻的状态相同,则相应的红绿灯时长t[i]计数;若时长超过上限值,则表示异常状态;若此时i=0,则表示红灯异常,否则表示绿灯异常,故③处代码为“t[i]>tlimit”。【例3】 (2024·浙江7月学考)小张收集了章回体小说《三国演义》的第1章至第120章的120个文件,其文件名依次为sg1.txt、sg2.txt、…、sg120.txt。他编写 Python 程序,对书中人物同时出现的情况进行简单分析,人物及其别名(如“孟德”是“曹操”的别名)作同一人处理。运行程序,用户输入“曹操|孟德 刘备|玄德”,输出结果如图所示,图中[11,28]表示曹操,刘备在第11章至第28章同时出现。人物同时出现的章数为:72,章依次为:[[1,2],[5,6],[11,28],[31,45],[47,52],[54,58],[60,74],[77,82],[106,106],[119,120]]人物同时出现的最大连续章数是:18请回答下列问题:(1)观察上图,可知曹操与刘备在第36章中 A (单选,填字母:A. 同时 /B. 没有同时)出现。 主程序如下:#输入姓名、别名,姓名存入列表 names,如 names=["曹操","刘备"]统计各个章中,列表 names 中每个人物(含别名)出现的次数,将结果存入字典total中,如 total={"曹操":[2,5,7,…], "刘备":[50,47,0,…]},表示曹操在第 1,2,3,…章分别出现了 2,5,7,…次 ,代码略num, result=calculate(total)mlen=getMaxLen(result)print("人物同时出现的章数为:", num, ",章依次为:")print(result)print("人物同时出现的最大连续章数是:",mlen)(2)定义函数 calculate(total),功能是统计列表 names 中人物同时出现的章回数,以及同时出现的章,结果示例如上图所示,请在画线处填入合适的代码。def calculate(total): num, length=0,0 # num保存120章中人物同时出现的章数 result=[] # result[i][0]、result[i][1]分别存储第i+1段章的起、止章号 k=-1 for i in range(0, 120): if allIn(total, i): num+=1或num=num+1 if length==0: begin=i+1 result.append([begin, begin]) # 在列表 result 末尾添加一个元素 k+=1 length+=1 result[k][1]=i+1 else: length=0return num, result(3)定义函数 getMaxLen(result),功能是统计最大连续章数,请在画线处填入合适的代码。def getMaxLen(result): mlen=0 for item in result: t=item[1]-item[0]+1 if t > mlen : mlen=t return mlen(4)定义函数allIn(total, cno),功能是判断列表names中人物是否同时出现在cno章中,若同时出现,返回True,请在画线处填入合适的代码。def allIn(total, cno): for item in names: if total[item][cno]==0 : return False return True【解析】 本题考查Python语言基础及字符串处理的综合知识。(1)观察图可知,第36回出现在[31,45]中,表明曹操与刘备这两个人物在36回同时出现,A正确。(2)由于num保存120个章回中人物同时出现的章回数,其初值为0,因此若检查到符合条件时,即调用函数allIn(total, cno)且其值为True时,计数器num加1,因此其表达式为num+=1。(3)此处统计最大连续章回数,变量mlen即为返回值。在循环中,将连续章回数t与最大值mlen进行比较,若有比最大值mlen更大的值t,则将t赋值给mlen,故答案是mlen。(4)由于 total={"曹操":[2,5,7,…], "刘备": [50,47,0,…]},表示曹操在第 1,2,3,…章回分别出现了 2,5,7,…次,根据这个信息可知,total是一个字典,item是某人物名,cno是某章回号的值,因此若total[item][cno]==0,则表明人物item在章回号cno中出现的次数为0,故函数返回值为False,反之则返回True。1. 已知列表a=[6,5],b=[6,5,4,3],则a*2+b的结果是( C )A. [6,5] B. [6,5,4,3]C. [6,5,6,5,6,5,4,3] D. 程序错误【解析】 在Python中,乘号的作用是将元素在列表中重复一次,C正确。2. (2023·浙江9+1联考)有如下Python程序段:a=[5,3,8,9,7,3,11]n=len(a)-1cnt=0for i in range(1,n): if a[i]==a[i+1]-a[i-1]: cnt+=1 elif a[i]>a[i+1]-a[i-1]: cnt+=2 else: cnt+=3print(cnt)执行该程序段后,变量cnt的值为( B )A. 9 B. 10C. 11 D. 12【解析】 本题考查数组运算的知识。程序段通过for循环遍历列表a中的元素,对于列表a中的第i个元素,如果其等于其相邻两个元素的差,则计数器cnt加1,否则,如果a[i]大于其相邻两个元素的差,则计数器cnt加2,否则计数器cnt加3。列表a中的第2个元素等于其相邻两个元素的差,因此cnt加1,列表a中的第3个到第5个元素都大于其相邻两个元素的差,因此计数器cnt会加2,而第6个元素a[i]小于其相邻两个元素的差,因此cnt加3。因此,最终计数器cnt的值为1+2+2+2+3=10,B正确。3. 有如下Python程序段:a=[5,2,7,10,17,25,42,66]c=0for i in range(2,len(a)): if a[i-1]+a[i-2]==a[i]: c=c+1print(c)运行程序后,输出的内容是( B )A. 2 B. 3C. 6 D. 7【解析】 本题考查对程序的阅读理解能力。变量c,记录的是列表a从下标2开始,满足每个数等于前两个数之和的个数。观察列表a中现有元素,c=3,B正确。4. (2023·浙江9+1联考)有如下Python程序段:a=[3,5,2,4,1]sum1=m=a[0]for i in range(1,len(a)): if a[i] m=a[i] sum1+=m执行该程序后,sum1的值为( C )A. 6 B. 9C. 11 D. 15【解析】 本题考查数组的知识。本题程序的功能是每次将a[i]与m中的较小值累加到变量sum1中,因此sum1=3+3+2+2+1=11,C正确。(共27张PPT)一、 数组及其基本操作信息技术 选择性必修1 数据与数据结构第二章 数组与链表知识过关1. 数组的概念(1)数组在内存中的存储方式为顺序存储。(2)数组是由相同类型的变量构成的一个序列。(3)数组名和下标组成数组的各个变量称为数组的分量,也称为数组元素。(4)创建数组时,系统会在内存中分配一块连续的存储空间,每个数组元素按照下标顺序存储。(5)一维数组:只有一个下标,下标用来表示数据元素在该序列中的位置。(6)二维数组:有两个下标,表示数据元素在该序列中的行、列位置,二维数组有行优先存储和列优先存储两种方式。2. 数组的特性(1)数组元素的数据类型相同。(2)通过数组名和下标对数组元素的值进行访问。(3)存储空间固定不变。归纳总结数组在创建时就分配好了存储空间,即其占用空间已固定,因此删除数组中的元素后,其占用的空间不变。3. 数组的基本操作(1)数组的创建。数组的创建实质是在系统内存中划分一块连续区域,用来保存数组所含的所有数据元素。(2)数组元素的访问。①数组元素的访问,指的是寻址到特定的数据元素,并根据存储地址对该数据元素进行读取、修改等操作。②数组元素可以通过数组名和下标直接进行访问。(3)数组元素的插入与删除。①当数组中某个位置要插入一个新数据时,必须先将该位置及后面的所有数据向后移动一个位置,然后将新数据插入。例如,在数组元素a[1]前插入一个新数据datax,操作后的数组a如图所示。②删除数组元素时,需要将被删除元素位置后的所有元素前移一个位置。例如,删除数组元素a[1]后的数组如图所示。4. Python列表常用函数和方法在Python中,常用列表来模拟实现数组的操作。Python列表常用函数和方法函数和方法 功能 实例len(list1) 统计列表list1中元素的个数 list1=[1,2,3,4]print(len(list1)),输出为4list1.append(x) 在列表list1末尾添加元素x list1=[1,2,3,4]list1.append(5)列表中的内容为[1,2,3,4,5]函数和方法 功能 实例list1.insert(i,x) 在列表list1中下标为i位置处插入元素x list1=[1,2,3,4]list1.insert(2,5)列表中的内容为[1,2,5 3,4]list1.pop(i) 将列表list1中下标为i的元素删除;若i不指定,默认为-1,即删除最后一个元素 list1=[1,2,3,4]list1.pop()列表中的内容为[1,2,3]典例精选【例1】 (2024·浙江1月选考)数组元素a[0]至a[n-1]依次存放着n个数据,现需要将元素a[n-1]插入在下标为x(0≤xtemp=a[n-1]for i in range(n-2,x-1,-1):a[x]=tempA. a[i+1]=a[i] B. a[i-1]=a[i]C. a[i]=a[i+1] D. a[i]=a[i-1]A【解析】 本题考查数组元素的移动操作。此算法实现的功能是将数组末尾元素a[n-1]移动到指定位置x。因此需要将下标位置范围为[x,n-2]区间内的元素整体向后移动一位。具体方式如下:元素值 0 3 4 6 7下标 x n-1初始化元素值 0 3 4 6 6下标 x n-1第1步:将6向后移一位覆盖7元素值 0 3 4 4 6下标 x n-1第2步:将4向后移一位覆盖6此时下标x所对应的位置空出,可以插入a[n-1]:元素值 0 3 7 4 6下标 x n-1第3步:将7插入下标x处因此移位的方向是前面的元素覆盖后面的元素,且参与移位的元素最左侧为下标x。【例2】 (2024·浙江6月选考)某监控设备可定时采集红绿信号灯的状态数据,数据格式记为[a,b],其中a、b分别为红灯和绿灯的状态值,0表示灯灭,1表示灯亮,如[0,1]表示红灯灭、绿灯亮。现要编写程序,每隔1秒采集并检测信号灯是否存在如下异常状态:第一类,红绿灯同时亮或同时灭;第二类,红灯或绿灯超时,即保持同一状态的时长大于上限值(如300秒)。检测到异常状态时就发送相应信息。请回答下列问题:(1)若检测到“红绿灯同亮”的异常,则采集到的数据是__________(单选,填字母)。 A. [0,0] B. [0,1]C. [1,0] D. [1,1]D(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。tlimit = 300 # 设置信号灯保持同一状态的时长上限值pre = [-1,-1]t = [0,0] # t[0]、t[1]分别记录红灯、绿灯保持同一状态的时长while True: # 接收一次采集到的状态数据,存入d,代码略 if ①__________________: if d[0] == 1: # 发送“红绿灯同时亮”信息,代码略 else: # 发送“红绿灯同时灭”信息,代码略 for i in ②________________________________________: if d[i] == pre[i]: t[i]+= 1 if ③__________________: if i == 0: # 发送“红灯超时”信息,代码略 else: # 发送“绿灯超时”信息,代码略 else: t[i] = 1 pre = d # 延时1秒,代码略d[0]==d[1]range(2)或range(len(pre))或range(len(d))t[i]>tlimit【解析】 本题考查Python程序设计。(1)根据题意0表示灯灭,1表示灯亮可知,红绿灯同时亮需表示为[1,1],D正确。(2)程序①处需判断红绿灯是否处于相同状态,若d[0]和d[1]的值相等,同时d[0]=1,表示红绿灯同时亮;否则d[0]=0,表示红绿灯同时灭,故①处代码为“d[0]==d[1]”。②处相关代码的功能为读取一次数据存列表d后需遍历d,故i取值01,故②处代码为“range(2)”。若d[i]=pre[i],表示i所对应的红绿灯相邻两个时刻的状态相同,则相应的红绿灯时长t[i]计数;若时长超过上限值,则表示异常状态;若此时i=0,则表示红灯异常,否则表示绿灯异常,故③处代码为“t[i]>tlimit”。【例3】 (2024·浙江7月学考)小张收集了章回体小说《三国演义》的第1章至第120章的120个文件,其文件名依次为sg1.txt、sg2.txt、…、sg120.txt。他编写 Python 程序,对书中人物同时出现的情况进行简单分析,人物及其别名(如“孟德”是“曹操”的别名)作同一人处理。运行程序,用户输入“曹操|孟德 刘备|玄德”,输出结果如图所示,图中[11,28]表示曹操,刘备在第11章至第28章同时出现。人物同时出现的章数为:72,章依次为:[[1,2],[5,6],[11,28],[31,45],[47,52],[54,58],[60,74],[77,82],[106,106],[119,120]]人物同时出现的最大连续章数是:18请回答下列问题:(1)观察上图,可知曹操与刘备在第36章中__________(单选,填字母:A. 同时 /B. 没有同时)出现。 主程序如下:#输入姓名、别名,姓名存入列表 names,如 names=["曹操","刘备"]统计各个章中,列表 names 中每个人物(含别名)出现的次数,将结果存入字典total中,如 total={"曹操":[2,5,7,…], "刘备":[50,47,0,…]},表示曹操在第 1,2,3,…章分别出现了 2,5,7,…次 ,代码略num, result=calculate(total)mlen=getMaxLen(result)print("人物同时出现的章数为:", num, ",章依次为:")print(result)print("人物同时出现的最大连续章数是:",mlen)A(2)定义函数 calculate(total),功能是统计列表 names 中人物同时出现的章数,以及同时出现的章,结果示例如上图所示,请在画线处填入合适的代码。def calculate(total): num, length=0,0 # num保存120章中人物同时出现的章数 result=[] # result[i][0]、result[i][1]分别存储第i+1段章的起、止章号 k=-1 for i in range(0, 120): if allIn(total, i): _____________________________ if length==0: begin=i+1 result.append([begin, begin]) # 在列表 result 末尾添加一个元素 k+=1 length+=1 result[k][1]=i+1 else: length=0return num, resultnum+=1或num=num+1(3)定义函数 getMaxLen(result),功能是统计最大连续章数,请在画线处填入合适的代码。def getMaxLen(result): mlen=0 for item in result: t=item[1]-item[0]+1 if t >__________: mlen=t return mlenmlen(4)定义函数allIn(total, cno),功能是判断列表names中人物是否同时出现在cno章中,若同时出现,返回True,请在画线处填入合适的代码。def allIn(total, cno): for item in names: if ______________________: return False return Truetotal[item][cno]==0【解析】 本题考查Python语言基础及字符串处理的综合知识。(1)观察图可知,第36回出现在[31,45]中,表明曹操与刘备这两个人物在36回同时出现,A正确。(2)由于num保存120个章回中人物同时出现的章回数,其初值为0,因此若检查到符合条件时,即调用函数allIn(total, cno)且其值为True时,计数器num加1,因此其表达式为num+=1。(3)此处统计最大连续章回数,变量mlen即为返回值。在循环中,将连续章回数t与最大值mlen进行比较,若有比最大值mlen更大的值t,则将t赋值给mlen,故答案是mlen。(4)由于 total={"曹操": [2,5,7,…], "刘备": [50,47,0,…]},表示曹操在第 1,2,3,…章回分别出现了 2,5,7,…次,根据这个信息可知,total是一个字典,item是某人物名,cno是某章回号的值,因此若total[item][cno]==0,则表明人物item在章回号cno中出现的次数为0,故函数返回值为False,反之则返回True。自我检测1. 已知列表a=[6,5],b=[6,5,4,3],则a*2+b的结果是( )A. [6,5] B. [6,5,4,3]C. [6,5,6,5,6,5,4,3] D. 程序错误 C【解析】在Python中,乘号的作用是将元素在列表中重复一次,C正确。2. (2023·浙江9+1联考)有如下Python程序段:a=[5,3,8,9,7,3,11]n=len(a)-1cnt=0for i in range(1,n): if a[i]==a[i+1]-a[i-1]: cnt+=1 elif a[i]>a[i+1]-a[i-1]: cnt+=2 else: cnt+=3print(cnt)执行该程序段后,变量cnt的值为( )A. 9 B. 10C. 11 D. 12B【解析】 本题考查数组运算的知识。程序段通过for循环遍历列表a中的元素,对于列表a中的第i个元素,如果其等于其相邻两个元素的差,则计数器cnt加1,否则,如果a[i]大于其相邻两个元素的差,则计数器cnt加2,否则计数器cnt加3。列表a中的第2个元素等于其相邻两个元素的差,因此cnt加1,列表a中的第3个到第5个元素都大于其相邻两个元素的差,因此计数器cnt会加2,而第6个元素a[i]小于其相邻两个元素的差,因此cnt加3。因此,最终计数器cnt的值为1+2+2+2+3=10,B正确。3. 有如下Python程序段:a=[5,2,7,10,17,25,42,66]c=0for i in range(2,len(a)): if a[i-1]+a[i-2]==a[i]: c=c+1print(c)运行程序后,输出的内容是( )A. 2 B. 3C. 6 D. 7【解析】 本题考查对程序的阅读理解能力。变量c,记录的是列表a从下标2开始,满足每个数等于前两个数之和的个数。观察列表a中现有元素,c=3,B正确。B4. (2023·浙江9+1联考)有如下Python程序段:a=[3,5,2,4,1]sum1=m=a[0]for i in range(1,len(a)): if a[i] m=a[i] sum1+=m执行该程序后,sum1的值为( )A. 6 B. 9C. 11 D. 15【解析】 本题考查数组的知识。本题程序的功能是每次将a[i]与m中的较小值累加到变量sum1中,因此sum1=3+3+2+2+1=11,C正确。C 展开更多...... 收起↑ 资源列表 一、 数组及其基本操作.docx 一、 数组及其基本操作.pptx