一維陣列與二維陣列(Python) - 高中資訊科技概論教師黃建庭的 ...

文章推薦指數: 80 %
投票人數:10人

一維陣列與二維陣列(Python) 陣列是將相同資料型別的多個變數結合在一起,每個陣列元素皆可視為變數使用,陣列佔有連續的記憶體空間,陣列提供索引值(index)存取陣列中 ... 高中資訊科技概論教師黃建庭的教學網站搜尋這個協作平台 黃建庭的教學網站新版黃建庭教學網站高三資訊課程108資訊科技基礎C++與PythonPython程式設計Python與資料分析C++演算法解題(1)C++演算法解題(2)機器學習教學平台ZSOJ資訊能力競賽考古題資訊能力檢定APCSRaspberry樹莓派ArduinoArduino與Scratch2FreeBSD/Linux筆記網管筆記AppInventor2Scratch2PHP程式設計JavaScript程式設計107資訊科技概論程式設計--使用機器人micro:bitAmeba3D列印JetBotDjangoLXR軟體使用心得相簿學生榮譽榜學經歷與著作與我聯絡連結高中生程式解題系統(zerojudge)UvaOnlineJudge資訊之芽(fb)Bebras系統管理新聞協作平台地圖最新協作平台活動 FreeHitCounter 版權宣告學校上課使用,可不標記作者 黃建庭的教學網站‎>‎Python程式設計‎>‎ 一維陣列與二維陣列(Python) 以下為此單元簡報。

https://drive.google.com/file/d/1mhGnDKwNykR39jengB-eF-sAbKCIdQtm/view?usp=sharing以下為本單元的教學影片(放置於YouTube上),以下兩種方式擇一。

(A)以YouTube播放清單方式觀看影片,如下。

https://www.youtube.com/playlist?list=PLOk9WKoJdjHatPtUmvq2RUrk8Ebee87Zj(B)以超連結方式觀看個別影片,如下。

Python-5-1-一維陣列Python-5-2-一維陣列範例Python-5-3-二維陣列Python-5-4-二維陣列範例一維陣列與二維陣列(Python) 陣列是將相同資料型別的多個變數結合在一起,每個陣列元素皆可視為變數使用,陣列佔有連續的記憶體空間,陣列提供索引值(index)存取陣列中個別元素,Python語言規定陣列的第一個元素其索引值為0,第二個元素其索引值為1,依此類推,一個陣列擁有n個元素,若要存取陣列最後一個元素,需設定索引值為n-1,由此可知,每個索引值對應唯一一個陣列元素,因此我們只要指定陣列與索引值就可存取陣列中指定的元素。

不使用陣列與使用陣列的差異,若程式中要計算全班30位同學的國文科成績的總分,不使用陣列則需宣告30個變數(例如:score1、score2、…、score30)去儲存30個國文科成績,再去加總「sum=score1+score2+…+score30」獲得國文科全班總分;若使用陣列則可以利用陣列索引值概念與迴圈結構,使用迴圈控制陣列索引值存取與累加每一個元素,達成加總的功能,在成績計算總分、不及格人數、分數人數分佈等統計使用陣列較容易撰寫,尤其在樣本空間放大時更明顯。

使用變數累加500個成績計算總分 使用陣列累加500個成績計算總分 sum=score1+score2+score3+score4+…+score500; 註:程式中不能寫…,實際上要完成宣告500個變數與500個變數相加的公式。

score=[90]*500 sum=0 for   i   in   range(500):   sum=sum+score[i] 5-1一維陣列 陣列是將相同資料型別的多個變數結合在一起,每個陣列元素皆可視為變數使用,陣列佔有連續的記憶體空間,陣列提供索引值(index)存取陣列元素。

Python語言規定陣列的第一個元素其索引值為0,第二個元素其索引值為1,依此類推,一個陣列擁有n個元素,若要存取陣列最後一個元素,需設定索引值為n-1。

5-1-1 陣列宣告與初始化 陣列初始化(一)個別初始化 A=[0]*4 A[0]=89 A[1]=55 A[2]=73 A[3]=66 陣列初始化(二)串列初始化 A=[89,55,73,66] 陣列初始化(三)迴圈初始化 A=[0]*4 foriinrange(4):   A[i]=90 5-1-2一維陣列與迴圈 利用迴圈變數與陣列索引值結合,經由控制陣列索引值可以存取陣列中所有元素,以下為迴圈變數與陣列索引值結合範例。

程式範例 程式執行結果 說明 A=[1,2,3,4,5] foriinrange(5):   print(A[i])   1 2 3 4 5 i=0 A[i]此時值為1 i=1 A[i]此時值為2 i=2 A[i]此時值為3 i=3 A[i]此時值為4 i=4 A[i]此時值為5 使用A[i]存取陣列中元素,使用迴圈控制i的變化,當i等於0,A[i]就會存取陣列A的第一個元素;當i等於1,A[i]就會存取陣列A的第二個元素;當i等於2,A[i]就會存取陣列A的第三個元素,依此類推,就可以存取到陣列所有元素,這就是陣列與迴圈結合可以存取到陣列中所有元素的概念。

5-1-3一維陣列範例  成績計算 1 2 3 4 5 6 score=[89,55,73,66] sum=0 foriinrange(4): sum=sum+score[i] print("第",i+1,"位同學成績為",score[i]) print(sum) 費氏數列 1 2 3 4 5 6 7 fib=[0]*100 fib[0]=1 fib[1]=1 foriinrange(2,100): fib[i]=fib[i-1]+fib[i-2] foriinrange(100): print(i+1,fib[i]) 5-2 二維陣列 二維陣列的宣告與初始化 所謂二維陣列的宣告是用於定義二維陣列的名稱與陣列中元素的個數,而初始化是指定陣列中元素的值。

例如:score=[[0]*40foriinrange(5)],就是宣告一個整數的二維陣列,名稱為score,其列索引值由0到4,共5列,其行索引值0到39,共40行,將其圖示化表示如下圖,程式中使用score[1][2]可以存取陣列score的第2列第3行元素。

5-2-1二維陣列宣告與初始化 行號 初始化方式一:個別設定 說明 1 2 3 4 … … … …   score=[[0]*40foriinrange(5)]  score[0][0]=90  score[0][1]=56  score[0][2]=98  …  score[4][37]=93  score[4][38]=47  score[4][39]=88 第1行:宣告二維陣列名稱為score有5列40行。

第2行:初始化陣列score第1列第1行值為90。

第3行:初始化陣列score第1列第2行值為56。

第4行:初始化陣列score第1列第3行值為98。

… 初始化陣列score第5列第38行值為93。

初始化陣列score第5列第39行值為47。

初始化陣列score第5列第40行值為88。

行號 初始化方式二:使用中刮號 說明 1   A=[[1,2,3],[4,5,6]] 第1行:宣告二維陣列名稱為A,初始化陣列A第1列第1行值為1,初始化陣列A第1列第2行值為2,初始化陣列score第1列第3行值為3,初始化陣列A第2列第1行值為4,初始化陣列A第2列第2行值為5,初始化陣列A第2列第3行值為6。

行號 初始化方式三:使用迴圈 說明 1 2 3 4 score=[[0]*40foriinrange(5)] foriinrange(5):   forjinrange(40):     score[i][j]=90 註:以此方式陣列中所有元素數值皆相同,但迴圈若配合隨機函式,就可以隨機產生不同的數值,此方法適合用於隨機產生陣列元素時使用。

第1行:宣告二維陣列名稱為score有5列40行。

第2到4行:使用巢狀迴圈,迴圈變數i控制列,變數j控制行。

當i=0,j=0,score[i][j]指向二維陣列score的第1列第1行並將90儲存入score[0][0]。

當i=0,j=1,score[i][j]指向二維陣列score的第1列第2行並將90儲存入score[0][1]。

當i=0,j=2,score[i][j]指向二維陣列score的第1列第3行並將90儲存入score[0][2]。

依此方式,依序將90填入陣列中第一列每一元素,再將90填入第二列每一元素,依此類推直到填滿五列。

5-2-2二維陣列與巢狀迴圈 程式中使用陣列的優點為可以使用陣列索引存取陣列元素,例如:score[1][2],括弧內1與2分別表示為列索引值為1,行索引值為2,表示為陣列score的第2列第3行元素。

也可以將索引值改成以變數i或變數j取代,如:score[i][j],當i等於1且j等於2,則score[i][j]相當於score[1][2],也就是表示陣列score的第2列第3行元素,此時可以使用巢狀迴圈控制變數i與變數j,當變數i與變數j變化時,對應的score[i][j]所對應的元素也會跟著改變。

以下為迴圈與陣列索引存取陣列中元素範例。

行號 陣列的使用範例 說明 1 2 3 4 5     importrandom score=[[0]*40foriinrange(5)] foriinrange(5):   forjinrange(40):     score[i][j]=random.randint(40,100) 第2行:宣告二維陣列名稱為score有5列40行。

第3到5行:使用巢狀迴圈,迴圈變數i控制列,變數j控制行。

程式「random.randint(40,100)」隨機產生介於40到100的數值。

當i=0,j=0,score[i][j]指向二維陣列score的第1列第1行並將隨機產生的數值儲存入score[0][0]。

當i=0,j=1,score[i][j]指向二維陣列score的第1列第2行並將隨機產生的數值儲存入score[0][1]。

當i=0,j=2,score[i][j]指向二維陣列score的第1列第3行並將隨機產生的數值儲存入score[0][2]。

依此方式,依序產生40個隨機值,填入陣列中第一列,再產生40個隨機值填入第二列,直到填滿五列 5-2-3二維陣列範例     Pascal三角形 設計一程式計算Pascal三角形,其定義如下。

解題想法 使用巢狀迴圈存取二維(8x8)陣列,外層迴圈變數i控制列,內層迴圈變數j控制行,當i值等於2,j值變化由1到1,利用「A[i][j]=A[i-1][j-1]+A[i-1][j]」求A[2][1],外層迴圈變數i加1,則i值等於3,j值變化由1到2,利用「A[i][j]=A[i-1][j-1]+A[i-1][j]」求A[3][1]與A[3][2],不斷重複上述動作,最後填滿陣列A即獲得Pascal三角形。

1 2 3 4 5 6 7 8 9 10 11A=[[0]*8foriinrange(8)] foriinrange(8): A[i][0]=1 A[i][i]=1 foriinrange(2,8): forjinrange(1,i): A[i][j]=A[i-1][j-1]+A[i-1][j] foriinrange(1,8): forjinrange(i+1): print(A[i][j],"",end='') print() Comments Signin|RecentSiteActivity|ReportAbuse|PrintPage|PoweredByGoogleSites



請為這篇文章評分?