資源簡介 專題11 數 組學業要求 知 識 點 學業水平等級1.能結合數組的應用案例,了解數組概念、結構、特性,并根據要求創建數組 32.學會通過數組名和下標訪問數組元素,并能根據需求插入、刪除數組元素 4知識點一 一維數組【知識梳理】1.數組是由相同________的變量構成的一個序列,常用的數組有一維數組和________數組。2.數組使用數組名(標識符)和下標(索引)區分數組內的各個變量。由數組名和下標組成數組的各個變量稱為數組的分量,即數組________。3.數組元素的類型相同,通過數組名和下標對數組中任意________的數據元素進行高效的訪問,數組的存儲空間固定不變。4.數組的創建實質是在系統內存中劃分一塊________區域,用來保存數組包含的所有數據元素。5.在數組中某個位置插入一個新的元素,必須先將該位置及其后的所有元素依次向________移動一個位置,以空出該位置,用于存放新元素。6.在數組中,刪除某個位置上的數據元素,需要將該位置元素后的所有元素依次向________移一個位置。7.數組創建時就分配好存儲空間,訪問數組元素不能________,刪除數組占用的空間不變(除非采用pop方法刪除)。8.一維數組指只有一個________,下標用來表示數據元素在該序列中的位置。9.在創建一個數組時,既要分配數組元素的個數,又要確定數組元素的________。如語句list1=[0]*10功能是創建一個包含10個整數類型的數組元素,初值均為0。10.采用for循環將一個序列中值賦值給一個________,如list1=[int(i) for i in ″6,52,44,12″.split(″,″)]表示將數字串的數字按逗號分隔并轉換成數值類型,再將這些數字存儲到數組list1中。11.統計數組list1中元素的________語句len(list1)。12.在數組list1最后一個元素后面新增一個元素x語句________,數組空間增加一個。13.刪除數組list1最后一個元素語句________,數組空間減少一個。【經典案例】數組的元素個數是固定的,存儲單元在數組定義時分配,元素順序關系由元素在數組中的位置(即下標)確定,對于不是固定長度的列表,用可能最大長度的數組來描述,會浪費許多內存空間。并且數組元素插入和刪除時,需要不斷移動數據元素。數組的優點:隨機訪問性強,查找速度快。主要缺點:插入和刪除效率低。【例1】 現有兩個升序數組a和數組b,現在要求將兩個數組合并,依舊保持升序。a=[2,3,5,7,9,11];b=[2,4,6]for i in range(len(b)):a=a+[0]i=len(a)-len(b)-1;j=len(b)-1k=len(a)-1while ①________:if ②________:a[k]=a[i]; i-=1else:a[k]=b[j]; j-=1③________print(a)(1)請將空白處填寫完整。(2)若①處代碼填寫為k>=0,會導致某些情況下無法得到預期的結果。下列4組數據中能測試出這一問題的是________(填字母,單選)。A.a=[2,4,6];b=[3,7] B.a=[4];b=[3,7]C.a=[6];b=[2,3,4] D.a=[2,5,6];b=[1]思維點撥精點撥 (1)程序的功能是將b中有序數據插入到a中,先在a中擴展len(b)個空間,將a和b中數據依次移動到a數組從后面開始的位置中。①若將b中全部數據移動到a中,a中原來數據是有序的,不管a中數據有沒有遍歷完,合并后的數據肯定是有序的。②為移動a前面數據的條件,當a[i]大于b[j]且a中數據沒有合并完,否則就將b的數據移動到a中。③無論移動a還是移動b中數據,k的指針始終會往前移動。(2)在比較過程中,要確保數據a[i]和b[j]是一個有效的位置上數據,因此②中不能缺少i>=0,當b中數據全部移動到a中后,j的值為-1,此時k還沒有到達0,因此再將比較時,j就不是原來的有效位置了聽課筆記:________________________________________________________________________________________________________________________________________________________________________________________________________【變式1】 lst1和lst2都是升序排序的列表,執行如下Python程序段:result=[]i=0 #用于遍歷lst1j=0 #用于遍歷lst2while iif lst1[i]result.append(lst1[i])i+=1else:result.append(lst2[j])j+=1while iresult.append(lst1[i])#②i+=1while jresult.append(lst2[j])#③j+=1下列說法不正確的是( )A.程序段①執行后,result可能與lst1相同B.程序段①執行后,result可能與lst2相同C.在一次程序運行中,②處代碼和③處代碼可能都被執行D.程序執行后,列表result中的元素升序排序【例2】 某酒店的房間編號為1到1000,對于空余的房間的記錄,采用連續空房間的起始房間編號和連續空房間數量進行記錄,例如:有空房間1、2、3、6、7、9號時,記錄的方法為:(1,3),(6,2),(9,1),共3條記錄。當有人退房時,一般出現4種情況:·若退出房間號為4時,屬于“上靠”情況,則第1條記錄修改為(1,4);·若退出房間號為5時,屬于“下靠”情況,則第1條記錄修改為(5,3);·若退出房間號為8時,屬于“上下靠”情況,則第2條、第3條記錄合并,修改為(6,4);·若退出房間號為12時,屬于“不靠”情況,則新增1條記錄為(12,1)。請回答下列問題:(1)當已有的空房間記錄為(3,5),(9,5),(16,3),(30,2),當退出房間號為8時,空房間記錄修改為________。(2)實現上述功能的部分Python程序如下,請在劃線下填入合適的代碼。″ ″ ″讀入已有的空房間記錄,個數為n,這些記錄已按房間起始號升序排好,每條記錄的房間起始號存入數組room,對應的連續空房間的個數存入數組num,下標均為0到n-1″ ″ ″x=int(input(″請輸入退出房間號:″))pos=0while ①________:pos+=1if pos>0 and pos<=n-1 and room[pos-1]+num[pos-1]==x and x+1==room[pos]:②________for i in range(pos,n-1):num[i]=num[i+1]room[i]=room[i+1]n-=1elif pos>0 and room[pos-1]+num[pos-1]==x:num[pos-1]+=1elif ③________:room[pos]=xnum[pos]+=1else:for i in range(n-1,pos-1,-1):room[i+1]=room[i]num[i+1]=num[i]room[pos]=xnum[pos]=1④________for i in range(n):print(room[i],″ ″,num[i])思維點撥明考向 本題考查數組元素的插入和刪除精點撥 (1)退房前的空房間情況為3-7,9-13,8號房間退出,符合上下靠的情況,更改為3-13,16-18,30-31。(2)①找到起始空房間號room[pos]大于x房間號,為pos確保是有效索引,加上條件pos聽課筆記:_________________________________________________________________________________________________________________________________________________________________________________________________________【變式2】 以下是實現正整數序列arr升序排列的程序代碼段:for i in range(1,len(arr)):key=arr[i]j=i-1while ①________:arr[j+1]=arr[j]j-=1②________print(″排序后的數組:″)for i in range(len(arr)):print(″%d″ %arr[i]) #依次輸出 arr 中的每個元素則劃線部分代碼正確的是( )A.①j>=0 and keyB.①j>=0 and keyC.①j>=0 and key>arr[j] ②arr[j]=keyD.①j>=0 and key>arr[j] ②arr[j+1]=key知識點二 二維數組【知識梳理】1.二維數組有________個下標,表示數據元素在該序列中的行、列位置。2.二維數組list1的一行稱為一個元素,因此可以用表達式________來表示數組中元素的個數,即數組的大小。3.可以對數組元素進行切片,取出數組元素中每個________項,如list1[i]表示二維數組第i行數據元素,list1[i][j]表示二維數組第i行第j列數據項。4.二維數組往往采用________循環分別對二維數組的行和列分別進行賦值。如list1=[[i*j for j in range(4)]for i in range(3)]表示創建一個3行4列的二維數組。【經典案例】二維數組在本質上仍然為一段連續的線性空間,和一維數組相同,根據下標進行訪問時,算法時間復雜度仍然是常數階。二維數組能很方便地存儲結構化數據,數據按行存儲,每列的數據類型往往是相同的,可以通過雙重循環來遍歷二維數組中每個數據項。二維數組可以存儲多個隊列,多個棧,也可以表示一個鏈表中多個節點。【例題】 有如下Python程序段:n=6a=[[0]*n for i in range(n)]for i in range(n):for j in range(i+1):if j !=0 and j !=i: a[i][j]=a[i-1][j-1]+a[i-1][j]else: a[i][j]=1程序執行后,a[4]的值是( )A.[1,3,3,1,0,0] B.[1,4,6,6,4,1]C.[1,4,6,4,1,0] D.[1,5,10,10,5,1]思維點撥明考向 本題考查二維數組的創建和遍歷精點撥 先創建一個6行6列的二維數組,遍歷二維數組的每一行,內循環從0至i,因此只對二維數組的左下半部分進行賦值。將第1列和主對角線(i和j相等)的數據全部賦值為1,其他數據為上一行的前一個和上一行的當前列之和,因此程序的功能是構建一個楊輝三角聽課筆記:_________________________________________________________________________________________________________________________________________________________________________________________________________【變式】 有如下Python程序段:a=[[1,3,6,9],[2,4,7,5],[5,2,3,8]]b=[1];n=len(a)for i in range(n):for j in range(n+1):if i b.append(a[i][j]) #b追加一個元素a[i][j]執行該程序執段后,數組b 中的元素為( )A.[1,3,6,9,7,5,8] B.[3,6,9,7,5,8]C.[1,3,6,9,2,4,7,5,8] D.[1,3,6,9,4,7,5,8]1.若長度為n的線性表采用數組a(a[0]~a[n-l])存儲,要刪除第t個位置上(存儲在a[t-1])的元素,對應的Python程序如下:for i in range(t-1,n-1):________________劃線處的代碼應是( )A.a[t]=a[i] B.a[i]=a[i+1]C.a[i]=a[i-1] D.a[i-1]=a[i]2.有如下Python程序段:a=[18,2,-1,-7,16,-2,12,8]k1,k2=1,1for i in range(len(a)):if a[i]>a[k1]:k2=k1;k1=ielif a[i]>a[k2]:k2=i該程序段運行后,變量k1,k2的值分別為( )A.2,5 B.4,0C.5,2 D.0,43.已知a數組存儲了10位學生的身高信息(范圍為150厘米~190厘米之間),現要找出所有身高超過170厘米學生中最矮的那位學生的編號及其身高數據,運行結果如圖所示。[180,152,168,152,160,173,151,155,165,181] 下標為5號,身高為173實現該功能的程序如下:from random import randinta=[randint(150,190) for i in range (10)]if max(a)<171:print(″所有人身高均小于 171! ″)else:f=True;k=0for i in range(10):if a[i]>170: if : k=i f=Falseprint (a)print(″下標為″,k,″號,身高為″,a[k])程序加框處代碼有錯,正確的語句應為( )A.a[i]C.a[i]4.已知6行4列的二維數組a以行優先的方式存儲在k個連續存儲單元中,每個數組元素占8個存儲單元,如果已知a[0][0]的首地址為1000,則a[3][2]的首地址為( )A.1112 B.1160C.1104 D.10805.小剛將我國部分省會城市及其對應的市花存儲到二維數組中,并依次輸出各省會城市名及其市花,例如:杭州的市花是桂花。相關代碼如下:a=[[″杭州市″,″桂花″],[″廣州市″,″木棉″],[″鄭州市″,″月季″],[″武漢市″,″梅花″],[″長沙市″,″杜鵑″],[″濟南市″,″荷花″]]for p 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]6.利用5列6行的二維數組qp來記錄某試場中的座位編號1~30,m=0qp=[[0 for i in range(5)] for j in range(6)] #建立二維數組并初始賦值為0for i in range(5):for j in range(6):if i %2==0:qp[j][i]=m*6+j+1else: qp[j][i]=m*6+6-jm=m+1運行上述程序段后,編號17所在的數組元素為( )A.qp[4][2] B.qp[2][4]C.qp[5][3] D.qp[6][1]7.小明需要根據訂單的取件距離依次安排快遞員取件。快遞員出發后不能中途折返,但可以接更遠距離的快遞訂單。當小明新接到一個取件訂單,他會依次安排可以取件的快遞員取件,若該訂單距離小于所有已出發的快遞員的最遠距離,則安排新的快遞員出發取件。編寫Python程序,實現上述功能。程序運行時,輸入訂單距離(各數值之間用“,”隔開),顯示每位快遞員的收取情況。快遞坐標:[243,123,167,309,229,183,87,333,183] 第1分組:[243,309,333] 第2分組:[123,167,229] 第3分組:[183,183] 第4分組:[87](1)若新派件一個快遞,坐標為229,則應該為第________個分組去取件。(2)實現的程序代碼如下,請將空白處填寫完整s=input(″依次輸入快遞坐標,用逗號分隔:″)dd=[int(i) for i in s.split(″,″)]print(″快遞坐標:″,dd)x=0;n=len(dd)fp=[[0] for i in range(n)] #建立n個分組for i in range(①________):j=0while ②________:j+=1fp[j].append(③________)if ④________:x+=1for i in range(x):print(″第″+str(i+1)+″分組:″,fp[i][1:])8.去除一個數組中重復的元素算法思想:變量i從第1個元素開始遍歷,變量j遍歷位置i后面的所有的元素,兩個元素進行比較,如果相等,將數組最后的元素替換索引位置j的元素,數組總長度減少1個,為了防止原最后一個元素與元素i相等,位置i與第j個元素進行第2次比較(j減1)。(1)數組a的原始值為[3,3,4,2,4,3],采用該算法去重后為[________]。(2)實現該功能的算法如下,請將空白處填寫完整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]: a[j]=a[n] ②________ j-=1③________i+=1for i in range(n+1):print(a[i],end=″″)9.為分析數組a中各元素依次變化的情況,進行如下定義:變化段:數組中相鄰兩個元素構成一個變化段。變化段有上升段(a[i]>a(i-1))、下降段(a[i]波峰:從上升段轉到下降段形成一個波峰。波峰的起點是峰頂前所有連續上升段中的第1個,終點是峰頂后所有連續下降段中的最后1個。對稱波峰:上升段與下降段個數相同的波峰稱為對稱波峰。下圖為一組數據的變化段及波峰示意圖。現要求統計數組a各元素依次變化過程中“對稱波峰”的個數。小李依據上述描述設計如下Python程序。請回答下列問題:(1)數組元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次變化過程中“對稱波峰”的個數為________。(2)把劃線處的代碼補充完整。def IsSymPeak(f,s):if ①________:return Trueelse:return False#讀取數據,并存儲到數組a中,代碼略flag=0 #存儲變化段的狀態:1表示升,-1表示降,0表示平steps=0 #上升段與下降段個數count=0 #對稱波的個數for i in range(②________):if a[i]>a[i-1]:if IsSymPeak(flag,steps): count+=1if flag==0 or flag==-1: ③________else: steps+=1flag=1elif a[i]==a[i-1]:if IsSymPeak(flag,steps): count+=1steps=0flag=0else:steps -=1flag=-1if IsSymPeak(flag,steps):count+=1print(″共有對稱波個數為″,count)專題11 數 組知識點一知識梳理1.數據類型 二維 2.元素 3.位置 4.連續 5.后 6.前 7.越界 8.下標 9.類型 10.數組 11.個數 12.list1.append(x) 13.list1.pop()經典案例例1 (1)①j>=0 ②i>=0 and a[i]變式1 C [本題考查兩個升序數組的歸并。用兩個指針分別遍歷兩個數組,第一個循環條件i例2 (1)(3,11),(16,3),(30,2) (2)①posroom[pos] ②num[pos-1]+=1+num[pos] ③x+1==room[pos] ④n+=1變式2 A [從第2個元素開始遍歷arr數組,將數組元素arr[i]插入到0至i-1合適位置,形成一個升序的序列,最后整個數組是有序的。內循環中j從i-1開始與key比較,為保證arr[j]有效,j必須大于等于0,同時當key小于被比較的數時,將當前j的數據向后移動,再向前繼續查找,當條件不成立時,key的插入位置為j+1。]知識點二知識梳理1.兩 2.len(list1) 3.數據 4.雙重經典案例例題 C變式 A [本題考查二維數組的應用.將二維數組a中下標i當堂過關檢測1.B [從索引t-1開始遍歷到n-1,將他后面位置(i+1)的數據賦值給當前位置,最終數組元素的個數為n-1。]2.D [k1是最大數的下標,k2是第二大數的下標。]3.B [找出所有身高超過170厘米學生中最矮的那位學生,f的初值為True,先找到滿足a[i]>170的第1位學生,將最值k的初值賦值為該學生的索引,同時將f的值置為False。]4.A [本題考查二維數組的相關知識。以行優先的方式存儲,每行共4個數據項,a[3][2]前共有3行2列,因此共3*4+2=14個數據項,共占14*8=112個存儲單元,首元素地址為1000。]5.B [p是數組a中元素,即是一個列表。]6.A [賦值對象為qp[j][i],即i表示列,j表示行,意味著是按列遍歷矩陣,因此第1列為1-6,第2列為m*6+6-j,即12-7遞減,第3列為8-18。]7.(1)2 (2)①len(dd)或n ②j③dd[i] ④j==x解析 (1)第2個分組最后一個坐標等于該坐標,可以取。(2)①對dd數組n個坐標逐一進行遍歷。②查找dd[i]在哪個分組,每一個分組最后一個數字為最大值,若快遞大于等于該值,表示可以取快遞。遍歷各個坐標時,查找該坐標應插入的組別。組類別j總是從第0組開始,當第i個坐標小于該組最后一個值,再查找下一組。③將該坐標添加到fp的第j組。④x表示總共的組別,當j在[0,x-1]中找到插入位置,說明目前有小哥可以取快遞,若j超出這個范圍,則需要新開一組。8.(1)3,4,2 (2)①j=i+1 ②n-=1 ③j+=1解析 (1)數組[3,3,4,2,4,3]→[3,3,4,2,4]→[3,4,4,2,4]→[3,4,4,2]→[3,4,2]。(2)①變量j從i的下一個位置開始,與之進行比較。②找到一個相同,總數n減少一個。③同時為了防止原最后一個元素與元素i相等,位置i與第j個元素進行第2次比較(j減1)。9.(1)3 (2)①f==-1 and s==0 ②1,len(a) ③steps=1解析 本題考查枚舉算法和多支選擇結構。(1)根據題目描述,對稱波的兩個要素是在下降段且步長為0。從第2個數據點開始的steps值分別為1,0,0,-1,1,2,1,1,0,1,2,3,2,1,0。第1個對稱波是1,4,3,上升下降段各1。第2個對稱波是7,9,3。第3個對稱波是4,7,9,6,3,1。(2)②比較對象是a[i]和a[i-1],因此i的初值為1,終值為len(a)-1。③當條件a[i]>a[i-1]成立時,表示處于上升的開始點,若原來是平行波段和下降波段,則上升波段數為1。①對稱波的兩個要素是在下降段且步長為0。 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫