從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 (第二版)
avatar-img
4會員
8內容數
本專題將以Python程式語言來實作資料結構,依序從陣列(Array)、堆疊(Stack)、佇列(Queue)、樹(Tree)到圖(Graph),透過不同方式來建立資料結構,並討論部分細節如:建構難度、記憶體空間、效率等等。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Python 是一門功能強大且簡潔的程式語言,內建了多種資料結構來幫助開發者處理各種不同的需求。今天,我們將介紹五種常見的資料結構:字串、清單、元組、集合和字典,並學習它們的使用方式。
Thumbnail
本篇文章探討了Python中的字串、列表、元組、集合與字典這五種資料類型的定義與基本操作。這些資料類型各具特點,例如字串和元組是不可變的,列表和集合是可變的,適合不同的使用場景。文章中詳細介紹如何定義進行基本的操作(如添加、刪除、訪問元素等)。
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
列表(List)和元組(Tuple)都是 Python 中用來存儲集合元素的數據結構,兩者看起來很像,在初學時很容易搞混,所以觀念要建立好。 可以把列表(List)和元組(Tuple)想像成是一個容器,什麼元素都可以塞
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Python 是一門功能強大且簡潔的程式語言,內建了多種資料結構來幫助開發者處理各種不同的需求。今天,我們將介紹五種常見的資料結構:字串、清單、元組、集合和字典,並學習它們的使用方式。
Thumbnail
本篇文章探討了Python中的字串、列表、元組、集合與字典這五種資料類型的定義與基本操作。這些資料類型各具特點,例如字串和元組是不可變的,列表和集合是可變的,適合不同的使用場景。文章中詳細介紹如何定義進行基本的操作(如添加、刪除、訪問元素等)。
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
列表(List)和元組(Tuple)都是 Python 中用來存儲集合元素的數據結構,兩者看起來很像,在初學時很容易搞混,所以觀念要建立好。 可以把列表(List)和元組(Tuple)想像成是一個容器,什麼元素都可以塞