從Python認識資料結構(一).陣列

閱讀時間約 3 分鐘
第一講。陣列
各位好,因為Python這款程式語言與其他語言的資料結構稍有不同,加上網路與書籍較少討論到以Python去實作資料結構的內容,所以我想透過幾個章節來介紹Python中的資料結構。

第一章、陣列的基本介紹

陣列(Array)是一種常見的資料結構,可以想像成可以一個長型櫃子,每層都可以放入一筆資料。陣列可分為靜態與動態結構,若由有順序的記憶體位置儲存資料可稱為靜態結構,相反的,若使用不連續的記憶體來儲存,則被稱為動態結構。
在Python中,陣列的靜態結構可由串列(List)來進行設計,動態結構則可透過鍊結串列(Linked List)來實踐,由於是最基本且最容易執行的資料結構,我們就將陣列放在第一講中先行介紹,後續我們會分別透過靜態與動態結構來執行走訪、新增、刪除、反轉、插入、搜尋等等各式常見功能。

1-1、透過靜態串列(List)方式實踐陣列

串列是一種緊密相連,且「連續性」儲存於記憶體位置的一種資料結構,好比一條街道的地址,通常是以連續的方式儲存。在Python中,List常用的屬性有四種,分別是串列名稱、維度、元素個數和索引值。
串列名稱顧名思義就是該串列的名稱,同時也會指向此陣列在記憶體中被儲存的位置;維度則代表此串列中的資料維度,如一維串列、二維串列等等;元素個數則是指串列中總元素個數有幾項;索引(index)是串列中用來指定元素位置的一種方式,在Python中,第一個元素的索引值是0,第二個是1,以此類推,也可以說第一個元素的索引值是0。
串列中每一個元素可以為任一資料型態,無需事先宣告,透過中括弧[ ]將資料包含在內,即可完成串列的宣告。以下方程式碼為例,list_demo中包含了數字與文字兩種資料型態,索引值為0的元素為1,索引值為1的元素為Apple,一共有三個元素。此外,若我們事先不曉得元素的內容,則可透過[None]這種方式先行佔據記憶體位置,提供後續資料儲存。

1-2、透過鏈結串列(Linked-List)實踐陣列

在Python上透過靜態結構來建立陣列的方式有一項明顯的缺點,那就是我們必須先宣告陣列中的元素個數。若我們事先不知道可能會用到的元素個數,我們必須先假定一個較大的元素個數供未來使用,這可能會導致部分記憶體空間沒有被使用到而浪費掉了,鏈結串列則可解決此浪費記憶體空間的問題
鏈結串列如同火車車廂般,可以隨時依照使用者需求大小而動態改變鏈結的個數,並將元素儲存至各車廂中,隨時可進行動態增加或刪除,鏈結始終保持前後關係,將不連續的記憶體透過鍊結的方式維繫關係,為了能成功走訪所有鏈結,我們須確保每一個車廂都有被連接到,最後要走訪時在以首節點為起點,循序走訪所有資料,底下程式碼透過以員工資料做為範例,每個節點儲存三筆資料,分別為name、salary與下個節點位置,請看範例。

1-3、陣列的走訪

走訪陣列的方式十分簡單,若是靜態結構,我們僅須透過for迴圈即可尋訪所有元素;若是採用動態的鏈結串列,首先我們必須先將當下的位置指向首節點後的節點位置,開始判斷當下的節點位置是否為空值,若否,則依序走訪,並印出相關資訊,當我們走到最後一個位置時,該指標應為None,便不會進入迴圈中,我們可以試著將走訪單向串列寫成一個函式show,方便後續呼叫使用。
下一節我們會繼續討論陣列中靜態結構與動態結構新增、修改元素的方式,有任何問題歡迎寄信至我的信箱或於底下留言和我討論。

參考書目

  1. 圖解資料結構 - 使用Python(第二版)
  2. 圖書演算法 - 使用Python
  3. Python3 物件導向程式設計 第二版
  4. 精通Python (第二版)
4會員
8內容數
本專題將以Python程式語言來實作資料結構,依序從陣列(Array)、堆疊(Stack)、佇列(Queue)、樹(Tree)到圖(Graph),透過不同方式來建立資料結構,並討論部分細節如:建構難度、記憶體空間、效率等等。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
我從追星AKB48開始燃起了學語言的熱情。 又在研究Python的程式語言原理,撬開了語言學的大門。
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
可能是初老症發作的的原因,最近玩到這類懷舊遊戲就很容易陷入某種懷舊時光的情緒中,一不小心就會玩到忘了時間,所以就興起了何不自己動手把童年那些有印象的街機遊戲全部實作一遍的念頭呢?不囉嗦以下就是這系列的第一款。。。
Thumbnail
在一系列的基礎教學過後,我們終於要來教學跟股票相關的文章了,那就是「如何爬取最新的財經新聞」,別嫌之前的基礎枯燥乏味,基礎打好我們才能夠將功能運用的千變萬化,所以還沒看過之前的基礎教學,可以先去觀看唷!!廢話不多說,我們就開始今天的教學吧!!
Thumbnail
到目前為止,我們都還是在附檔名為.py的Python檔案執行程式碼,當程式需要與外部的檔案互動,例如讀取文字、表格、或是影像來做分析,或是把程式執行的結果儲存下來,就需要能夠存取外部的檔案。例如,在上一節中,當貪食蛇遊戲結束之後,隨著程式停止執行,該次的分數也就被丟棄,若能將分數記錄下來,下次遊戲開
Thumbnail
每當要研究投資標的時,你是否也會覺得A網站的財報資料完整,又覺得B網站的選股條件完善,又覺得C網站的新聞比較重要,有時身邊又沒有隨身攜帶筆電怎麼好查詢呢?這時可能就在想怎麼沒有人開發一個程式能完成符合我想要的功能啊~~與其求助於人,不如自己動手做最好,有相同煩惱的人,LINE Bot超適合你!!
Thumbnail
我希望透過在好學校開設「Python 的 50+ 練習:資料科學學習手冊」,讓學生一步步完成這門課程所有的觀念講解、範例實作以及練習之後,扎實地將 Python 程式設計與資料科學應用納入自己的技能組,成為一位擅長寫程式處理資料的分析師,大幅提升工作掌握度與職涯發展性!
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
我從追星AKB48開始燃起了學語言的熱情。 又在研究Python的程式語言原理,撬開了語言學的大門。
Thumbnail
在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
可能是初老症發作的的原因,最近玩到這類懷舊遊戲就很容易陷入某種懷舊時光的情緒中,一不小心就會玩到忘了時間,所以就興起了何不自己動手把童年那些有印象的街機遊戲全部實作一遍的念頭呢?不囉嗦以下就是這系列的第一款。。。
Thumbnail
在一系列的基礎教學過後,我們終於要來教學跟股票相關的文章了,那就是「如何爬取最新的財經新聞」,別嫌之前的基礎枯燥乏味,基礎打好我們才能夠將功能運用的千變萬化,所以還沒看過之前的基礎教學,可以先去觀看唷!!廢話不多說,我們就開始今天的教學吧!!
Thumbnail
到目前為止,我們都還是在附檔名為.py的Python檔案執行程式碼,當程式需要與外部的檔案互動,例如讀取文字、表格、或是影像來做分析,或是把程式執行的結果儲存下來,就需要能夠存取外部的檔案。例如,在上一節中,當貪食蛇遊戲結束之後,隨著程式停止執行,該次的分數也就被丟棄,若能將分數記錄下來,下次遊戲開
Thumbnail
每當要研究投資標的時,你是否也會覺得A網站的財報資料完整,又覺得B網站的選股條件完善,又覺得C網站的新聞比較重要,有時身邊又沒有隨身攜帶筆電怎麼好查詢呢?這時可能就在想怎麼沒有人開發一個程式能完成符合我想要的功能啊~~與其求助於人,不如自己動手做最好,有相同煩惱的人,LINE Bot超適合你!!
Thumbnail
我希望透過在好學校開設「Python 的 50+ 練習:資料科學學習手冊」,讓學生一步步完成這門課程所有的觀念講解、範例實作以及練習之後,扎實地將 Python 程式設計與資料科學應用納入自己的技能組,成為一位擅長寫程式處理資料的分析師,大幅提升工作掌握度與職涯發展性!