資源簡介 專題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)。 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫