资源简介 专题11 数 组知识点一 一维数组1.有如下Python程序段:a=[12,8,9,18,2,19,28,6]for i in range(len(a)-1):if a[i]a[i],a[i+1]=a[i+1],a[i]p=len(a)-1for i in range(len(a)-2,0,-1):if a[i]>a[p]:p=itmp=a[p];a[p]=a[0];a[0]=tmp执行该程序段后,a列表的值为( )A.[28,9,18,8,19,12,6,2]B.[12,9,18,8,19,28,6,2]C.[28,9,18,19,8,12,6,2]D.[2,9,12,8,18,19,6,28]2.去除数组a中重复数据,部分程序代码如下a=[5,6,4,7,5,7,6,5,7,2]i=0;n=len(a)-1while i①________while j<=n:if a[i]==a[j]: if a[i]==a[n]: ②________ else: ③________ n-=1j+=1i+=1print(a[:n+1])则划线处应填空的内容是( )A.①j=i+1 ②a[j]=a[n] ③j-=1B.①j=i ②j-=1 ③a[j]=a[n]C.①j=i+1 ②j-=1 ③a[j]=a[n]D.①j=i+1 ②i-=1 ③a[j]=a[n]3.以下Python程序段用以实现在列表a下标为K的位置处插入元素X,而不会导致原有数据的丢失。x=int(input(″请输入插入的数据:″))k=int(input(″请输入插入位置:″))a=[10,20,30,40,50,60,70]a.append(0) #在最后添加一个0,用以插入新数据。for i in range(len(a)-2,k-1,-1):①________a[k]=x则划线处填入的代码为( )A.a[i+1]=a[i] B.a[i]=a[i+1]C.a[i]=a[i-1] D.a[i-1]=a[i]4.有如下Python程序段:a=[1,0,0,0,1,0,1]for i in range(100,0,-1):flag=Truem=ifor j in range(len(a)-1,-1,-1):if m % 2!=a[j]: flag=Falsem//=2if flag:ans=ibreakprint(ans)程序运行后,变量ans的值是( )A.46 B.58C.69 D.815.有如下的Python程序段:a=[3,5,7,9,11,13,15]p=2for i in range(p+1,len(a)): a[i-1]=a[i] del a[i] #从列表中删除元素a[i]则与方框中程序段功能相同的语句是(注:pop()删除列表最后一个元素,del()删除列表指定范围元素)( )A.a=a[:p]+a[p+1:] B.a=a[:p]+a[p:]C.a.pop() D.del a[p:]6.将一组数保存在列表a中,若a[0]=0,则在列表a中从左到右找到第一个大于零的元素,并与a[0]交换。用Python程序描述,下列选项中不可行的是( )A.i=0while a[i]==0: i+=1a[0],a[i]=a[i],a[0]B.for i in ranges(5):if a [i]>0:breaka[0],a[i]=a[i],a[0]C.i=0while True:if a[i]>0:breaki+=1a[0],a[i]=a[i],a[0]D.for i in a:if i>0:breaka[0],a[i]=a[i],a[0]7.列表a有n(n>=2)个正整数,相邻两数的差值为1,0或-1。求相邻两数具有相同差值的连续子序列中,子序列元素和的最大值。实现该功能的程序段如下,加框处应填写的正确代码是( )state=a[1]-a[0]maxv=t1=t2=a[1]+a[0]for i in range(2,n):f=a[i]-a[i-1]print(maxv)8.有如下Python程序段:import randomn=8a=[random.randint(0,9) for i in range(n)]for t in range(2):i=t+1while iif t % 2==0: if a[i-1]a[i+1]: i+=2 else: a[i]+=random.randint(0,9)else: if a[i-1]>a[i] and a[i] i+=2 else: a[i] -=random.randint(0,9)print(a)运行后,数组a中的值可能是( )A.[8,8,3,5,4,7,3,5]B.[5,11,10,18,8,9,0,2]C.[1,2,1,4,0,10,-1,7]D.[7,12,5,17,9,19,-10,8]9.下列Python程序段功能为:列表lst中存放的是无重复的正整数,找出其中的最大值max1和次大值max2。max1=max2=0for i in range(len(lst)):if lst[i]>max1: ____(1)____ ____(2)____elif lst[i]>max2: ____(3)____print(″最大值是:″+str(max1)+″,次大值是:″+str(max2))上述程序段中划线处可选语句为:①max1=lst[i] ②max1=max2 ③max2=max1 ④max2=lst[i]则(1)、(2)、(3)处语句依次可为( )A.③①④ B.①③②C.③①② D.①③④10.有Python代码如下:a=[6,3,7,5]b=[0,1,2,3]for i in range(3,0,-1):if a[b[i]]>a[b[i-1]]:b[i],b[i-1]=b[i-1],b[i]print(b)则运行结果是( )A.[3,2,1,0] B.[1,3,0,2]C.[2,0,3,1] D.[2,0,1,3]11.有如下Python程序段:a=[9,1,7,3,8,4]key=5pmin=a[0]for i in range(1,len (a)):if keypmin=a[i]print(pmin)执行该程序段后,输出的结果是( )A.1 B.4C.7 D.912.有如下Python程序,程序执行,输入数据k之后输出的结果不正确的是( )L=[8,10,9,14,13,4,9,13,10]k=int(input('请输入k值:'))j=0for i in range(8):if L[i]<=k:L[j]=L[i]j=j+1print(L[:j])A.k=8输出:[8,4]B.k=9输出:[8,9,4,9]C.k=10输出:[8,10,9,4,9,10]D.k=13输出:[8,10,9,13,4,9,13]13.有如下Python程序:a=[43,23,87,67,80]queinfo=[]for item in a:k=0while kif item>=queinfo[k][-1]: breakk+=1if k==len(queinfo):queinfo.append([item])else:queinfo[k].append(item)print(len(queinfo))执行该程序段后,输出的结果是( )A.1 B.2C.3 D.414.某学校要组建年级学生会,共有cla个班级,n个人报名,每班报名人数大于等于1人,招募m个人(其中m>cla),录取规则如下:每班必须有一人录用(取综合评分最高),剩余人数按报名学生的综合评分由高到低录取。程序运行的界面如图所示:输入要挑选的人数:12 切分线为:95 李疏铜 98 董奥雪 95 李中山 97 舒恺臣 99 罗梓尹 92 谢邹逸涵 97 方政 95 陶佳怡 99 陈果儿 97 周文琅 96 陈余雄 95 潘文博 91 王志豪 96 一共挑选人数:13(1)实现上述功能的Python程序如下,请在划线处填入合适的代码。(2)程序中加框处代码有错,请改正。def search(x): #查找x班级最高分学生的下标amax=-1;p=-1for i in range(len(score)):if ①________: amax=score[i] p=ireturn pdef qfx(m): #查找得分最高的前m个人的得分b=[0]*101for i in range(n):if not in f[i]: b[score[i]]+=1i=100while b[i]0:i-=1b[i]+=b[i+1]②________cla=6#读取n个人班级、姓名和综合得分,分别存储数组bj、xm和score中,代码略m=int(input(″输入要挑选的人数:″))f=[False]*n #是否选入的标志for i in range(cla):t=search(i+1) #1班对应的索引号为0f[t]=Truefsx= #计算剩下人的切分线print(″切分线为:″,fsx)for i in range(n):if ③________:f[i]=Truenc=0for i in range(n):if f[i]:nc+=1#输出挑选人员名单和人数,代码略知识点二 二维数组1.在一个6行8列的二维数组a中,每个元素所占空间大小为8个字节,从首地址SA开始连续存放在存储器内。该数组按行优先存储时,元素a[3][4]的起始地址为( )A.SA+224 B.SA+216C.SA+192 D.SA+1762.有如下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[2][2]的值为( )A.2 B.6C.8 D.113.有如下Python程序段:n=4a=[[i*n+j+1 for j in range(n)]for i in range(n)]for i in range(n//2):for j in range(1,n,2):a[i][j],a[n-i-1][n-j-1]=a[n-i-1][n-j-1],a[i][j]则程序执行后,a[1][1]和 a[2][0]的值分别为( )A.6和9 B.8和9C.11和9 D.11和84.有如下Python程序段:n=4a=[[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和10C.6和11 D.7和115.用Python程序对分辨率为500*500的白色背景图像文件white.jpg(如图所示)进行处理,代码如下:white.jpgfrom PIL import Imageim=Image.open(″white.jpg″)pix=im.load()width=im.size[0] #获取图像宽度值height=im.size[1] #获取图像高度值for x in range(height):for y in range(width):if x<=width//2 and y<=height//2: if x%50==0 or y%50==0: pix[x,y]=(0,0,0)elif y> width //2: if x==y or width-x-1==y: pix[x,y]=(0,0,0)im.show()程序执行后的图像效果是( )6.货轮在装载货物时,不相容的物品不能装在一只箱子中。比如酸类腐蚀物品不宜和碱类腐蚀物品混装,否则容易造成事故。物品不相容关系用下表表示:每一种货物用一个整数编号表示,如第i物品和第j物品不相容,则表第i行j列和第j行i列的值均为1。如1号物品和3号物品不相容,则表中第1行第3列,第3行第1列的值均为1。小明设计了一个Python程序检查n张货物装箱清单是否合理(检查每张装箱单中是否有不相容的物品)。列表a依次存储各装箱清单中的物品编号(1-m之间的整数),每张清单的物品数量依次存储在列表b中。如b[0]=3,表示第1张装箱清单有3件物品。程序运行的部分结果如图所示。请回答下列问题:第1张清单[5,4,6,3,1] 第2张清单[4,3,5] 第3张清单[2,5,1] 第1张清单不合理! 第2张清单不合理!(1)如物品不相容关系如表所示,有3张装箱清单,b[0]=3,b[1]=3,b[2]=4,列表a的值依次是6,2,3,1,4,3,4,2,5,1,则不合理的清单数量是________(填数字)。(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。f=[[int(s[i*6+j]) for j in range(6)]for i in range(6)]def Check(f,t):for i in range(len(t)-1):for j in range(①________): if f[t[i]-1][t[j]-1]==1: return Falsereturn Truea=[5,4,6,3,1,4,3,5,2,5,1]m=6b=[5,3,3]p=0;k=0;h=[]for i in b:c=Check(f,②________)print(″第″,k+1,″张清单″,a[p:p+i])if c==False:h.append(″第″+str(k+1)+″张清单不合理!″)k+=1p=p+ifor ③________:print(i)7.编写“矩形面积”程序,实现如下功能:按一定比例随机生成a(1)至a(100)数组元素的值:0或1(0多1少);将这100个数组元素,按行依次转化为10×10的二维阵列;当数组元素的值为0时表示没有障碍物,当数组元素的值为1时有障碍物。寻找阵列中构造出的最大面积的矩形面积和起点坐标。程序运行界面如图所示。(1)实现上述功能的Python程序如下,请在划线处填入合适的代码。(2)程序中加框处代码有错,请改正。实现上述功能的Python代码如下:def Check(a,x,y): #在数组a中从点x,y开始向右向下查找最大矩形面积i=x;maxx=0;n=10;jn=10while iif ①________: breakj=y+1;s=0while j j+=1②________jn=j #更新右边界,从该位置开始,右边的区域不能计算面积if s>maxx: maxx=si+=1return maxx#产生一个10*10的初值为0的二维数组a,并随机产生若干个障碍物,将数组a中的值修改为1,如图所示,代码略n=0;maxx=0;px=0;py=0;t=0for i in range(n):for j in range(n):if : ③________if t>maxx: maxx=t px=i+1 py=j+1print(″构成的最大面积是:″,maxx,″。起点坐标为:″,px,py)8.BMP图片能压缩的一个原因是图片本身存在空间冗余,即一幅图像像素之间往往存在着连贯性。如图a所示,假设此图为256色位图图像,第一行为16个白色像素,每个像素颜色用一个“FF”表示,存储信息用十六进制描述为“FF,FF,FF,……FF”(16个“FF”)。压缩后可以用两个字节“10FF”来表示,第一个字节“10”表示数量,第二个字节“FF”表示颜色,存储空间为原来的1/8。现在对256色位图图像信息进行压缩,算法描述如下:①像素用十六进制编码;②对像素压缩用两个字节为一个单元存储,第一个字节存储连续相同像素的个数,第二字节存储此像素的颜色编码;③连续相同像素超过255个,用多个单元存储该连续像素。小刘根据上述描述设计了如下Python程序:f=open(″图片代码.txt″,″r″)list1=[];line=f.readline()while line:data=line.split()list1=list1+dataline=f.readline()print(″原始数据信息″)print(list1)print(″---------″)f.close()def dtoh(n):tmp=″″while n>0:r=n % 16;n=n//16if r>9: tmp=①________else: tmp=str(r)+tmptmp=″0″+tmp #保证转换结果至少为两位十六进制数return tmp[-2:]n=len(list1) ;ans=[]list1.append(″OV″)key=list1[0];pos=1while poscount=1while poscount+=1pos+=1tim=count//255rem=count % 255for i in range(tim):②________if rem>0:ans.append(dtoh(rem)+key)③________pos+=1print(″压缩数据信息″)print(ans)阅读上述代码,请回答下列问题:(1)图像数据片段“ABABAAAAAAAAAAAAA AAAAAAAD9”经过该程序压缩后的数据是________。(2)请在划线处填入合适的代码。9.生成m颗(m<=30)地雷随机放置在10×10的方格中,方块中出现地雷用#表示,出现数字,则表示在其周围相邻的方块中共有多少颗地雷,中间位置有8个方块相邻,边上位置有5个方块相邻,角上位置有3个方块相邻。程序运行的结果如图所示:实现上述功能的Python程序如下,请在划线处填入合适的代码。def Check(a,x,y): #统计第x行第y列四周雷的个数count=0for i in range(x-1,x+2):for j in range(y-1,y+2): if ①________: if a[i][j]==9: count+=1return countimport randomn=10a=[[0 for j in range(10)]for i in range(10)]m=int(input(″输入地雷的个数″))i=0while ix=random.randint(0,9)y=random.randint(0,9)if a[x][y]==0:a[x][y]=9②________for i in range(n):for j in range(n):if a[i][j]!=9: ③________for i in range(n):s=″″for j in range(n):if a[i][j]==9: s=s+″# ″else: s=s+str(a[i][j])+″ ″print(s)专题11 数 组知识点一1.A [第一个循环实现从第1个数据开始与他相邻的数据进行比较,如果他后面的数小就进行交换,结果为[12,9,18,8,19,28,6,2]。第2个循环的功能是最大值的初始位置在最后,若找到比最大值大的,更新最大值的位置,因此最大值位置为5,再将最大值与第一个数进行交换。]2.C [变量i从0开始遍历,程序的功能是让[0,i]这个区间内数据不会重复,因此指针j需从i后面的第1个位置i+1开始遍历,若有重复(a[i]和a[j]相等),将最后一个数据a[n]覆盖a[j],数据个数n将减少一个。但a[n]也可能等于a[i],即a[i]和新的a[j]相等,只是将个数减少一个,j重新遍历一次。]3.A [需从原数组最后一个位置开始,将数据向后移动,即把当前位置值赋值给他后面位置。]4.C [一个数除2的余数分别等于列表a从后向前的数,那么就将列表a看成二进制数各个位上数字,转换成十进制数后为69。]5.A [框中程序相当于把索引P位置以后字符依次前移一个位置,然后把最后一个元素删除,答案A实现同样功能。B内容不变,C只删除了最后一个元素,D则把P及以后元素全部删除了。]6.D [本题考查循环结构。D选项中变量i已经是列表a中的元素,无法实现两个位置数据交换。]7.D [state是两个数的差值,当两个差值不相等时进行最值比较,由于循环了n-2次,最后一次的最值在循环时没有比到,在循环结束后需再一次进行最值比较。]8.C [本题考查Python循环与数组的应用。a数组初始有8个[0,9]元素。中间元素比两边元素大时往后移动两个位置,否则重新产生a[i]的值,也就是索引1、3、5位置上的值都是比两边相邻元素大。第二次循环中间元素比两边小时才往后移两个位置,否则重新产生a[i]的值,也就是索引2、4、6位置上的值都是比两边相邻元素小。]9.A [本题考查最值查找。找到一个最大值,原最大值为现在次大值。若lst[i]大于max2,需更新次大值。]10.D [遍历数组b中数据,如果数组b作为索引下标,其对应数组a中值大于前面的值,进行交换,即向后入前遍历,升序排列后并交换索引。]11.C [找一个比key大的最小值。]12.C [本题考查循环和分支结构的综合应用。综合分析程序可得for循环用循环变量i作为位置来遍历列表L的前八位元素,当相应位置上的值不大于输入的的k值时,将i位置上的元素赋值到j位置上,并且更新j的的值,若是i位置上的值大于输入的的k值,则不做任何处理,因此可以大致得到该程序的作用是将列表L前八位元素中不大于k的值依次前移并且输出新列表。C选项中最后一个10的索引值为8,访问不到,因此错误。]13.B [queinfo初值为空,语句queinfo.append([item])是将一个列表添加到queinfo,因此他是一个二维数组。遍历列表a,在queinfo数组从第0个元素开始,与每个元素最后一个数据项进行比较,如果大于等于元素最后一个数据项,结束比较,此时j肯定在0至len(queinfo)-1之间,若j的值为len(queinfo),说明该元素比queinfo中每个元素的最后一个值均小,则新成一组。queinfo的值为[[43,87],[23,67,80]]。]14.(1)①score[i]>amax and bj[i]==x ②return I ③not f[i] and score[i]>=fsx (2)qfx(m-cla)解析 本题考查自定义函数的应用。(1)①search函数查找x班级最高分学生的下标,因此比较的关键有x班,且该班学生的得分两个条件。②qfx函数查找得分最高的前m个人的得分。在for i in range(n)循环中,统计每个分数的人数。从100分向下枚举,如果得分前面的得分总人数和小于m人,继续向下查找,当前面的人数累加和等于m时,表示正好有m个人符合条件,累加和大于m时,表示最低分数有多个相同的人。因此返回的切分线为i。③前面已经挑选了cla个人,将找出剩下m-cla个人,因此条件是f的值为False且分数线大于等于切分线。(2)前面已经选了cla个人,将找出剩下m-cla个人,因此将计算m-cla个人的切分线。知识点二1.A [本题考查二维数组空间相关知识点。元素a[3][4]的起始地址为SA+8*(24+4)=SA+224。]2.D [创建一个每行均为1,2,3,4的3行二维数组,遍历每行每列,对每个数据项加上4*i,因此a[2][2]原值为3,再加8,值为11。]3.D [创建一个[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]的二维数组,遍历前2行,对其中偶数列按对称行和对称列进行交换。a[1][1]是原a[2][2]的值,a[2][0]是原a[1][3]的值。]4.B [本题考查二维数组。先生成一个1-4,5-8,9-12,13-16的4行4列的矩阵。外循环for i in range(1,n,2)表示对偶数行进行操作,j和n-j-1表示两个列坐标,且是左右对称的,行坐标保持不变,因此程序的功能是偶数行的数据进行左右水平翻转,奇数行保持不变。]5.B [条件x<=width//2 and y<=height//2成立,表示坐标x,y位于左上角4分之1区域。若条件x==y or width-x-1==y成立,表示下半部分的两条对角线坐标,将这些区域的值赋值为黑色。]6.(1)2 (2)①i+1,len(t) ②a[p:p+i] ③i in h解析 本题考查二维数组的相关性质。(1)第2张中1和3不相容。(2)①第i物品和第j物品,为了避免组合重复,j从i+1到最后。②p的初值为0,表示第1张订单的开始位置,订单数量存储在数组b中,那么订单的结束位置为p+i-1。③从语句h.append(″第″+str(k+1)+″张清单不合理!″)来看,列表h中存储的是不合理的订单情况。7.(1)①a[i][y]==1 ②s=(i-x+1)*(j-y) ③t=Check(a,i,j) (2)a[i][j]==0解析 本题考查二维数组的性质。(1)①变量i从当前行开始,先向右遍历列,若碰到障碍物,语句jn=j是为了更新右边界,从该位置开始,右边的区域不能计算面积。接着再向下遍历,如果碰到i行的第1列就是障碍物,要结束循环,因此第i行第y列是障碍物。②面积是行和列构成。③调用自定义函数来计算最大面积t=Check(a,i,j)。(2)从第0行第0列这个点开始遍历,如果该点不是障碍物,开始寻找最大面积。8.(1)02AB0AAA01D9 (2)①chr(r+55)+tmp ②ans.append(″FF″+key)或ans+=[″FF″+key] ③key=list1[pos]解析 (1)对像素压缩用两个字节为一个单元存储,第一个字节存储连续相同像素的个数,第二字节存储此像素的颜色编码。(2)①大于9的转换成A-F之间的字母。②将压缩代码添加到ans中。③更新下一个连续字母key。9.①0<=i解析 本题考查二维数组的相关性质。① Check函数统计第x行第y列四周雷的个数,变量i,j表示从他上一行前一列到下一行的后一列区域,但这些区域要在矩阵的范围内。②变量i表示雷的个数,每增加一个雷,x的值将增加1。③若当前位置不是雷,调用函数统计四周雷的个数a[i][j]=Check(a,i,j)。 展开更多...... 收起↑ 资源预览