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

更新於 發佈於 閱讀時間約 5 分鐘
raw-image

各位好,今天接續從Python認識資料結構(二).陣列中延伸,介紹如何用Python設計陣列結構來執行刪除元素、計算元素數量與反轉的功能。


3-1、刪除元素

我們如果運用靜態結構-串列(List)方式來建立陣列的話,那麼刪除元素主要有三種方式,根據不同需求採用不同函式,第一種是remove,語法是list.remove(元素),這種方法用於我們不用知道指定元素的索引值,可以直接從串列中將指定元素移除,但若指定元素沒有出現在串列中,則會回傳錯誤訊息。

第二種移除元素的方法是pop,語法是list.pop(元素的索引值),與remove不同的是,pop需要知道該元素確切的索引值才可進行移除,且pop後會回傳該索引值的元素,並將其移除串列中,若使用pop卻不給定元素的索引值,則會移除串列最後一個元素並回傳。最後一種方法是del,語法是del list[索引值],與上述pop方法不同的是,del函式並不會回傳該元素,而是直接將其刪除。

若採用鏈結串列(Linked List)的方式建立陣列,刪除的要求可分為刪除最前面的元素、最後的元素及指定元素。若要刪除最前面的元素,我們可以將head的next屬性改為第一個元素的next屬性,如此一來,原先第二個元素就會被接在head後方,完成第一個元素的刪除,此時的刪除並非將其移除記憶體空間,而是改變鏈結的順序,刻意丟失該元素的資訊而已。

在鏈結串列要刪除最後一個元素,我們先找到倒數第二個節點位置,並將此節點的next屬性改為None,此時倒數第二個節點後就沒有資料點,其成為倒數最後一個節點,也就完成上述功能最後一種刪除指定的元素的作法,我們同樣先找到指定元素的前一個節點位置,並將指定元素前個節點的next屬性改為指定元素的next屬性,這個部分可以會比較難以理解,提供一張鏈結的圖來想像一下過程。

從上述三種鏈結串列刪除方法可以發現,透過鏈結串列來實作刪除功能時,我們並非真的去刪除節點,而是透過更改next屬性來刻意的丟失該節點資料,使鏈結串列在尋訪過程中不被走訪。

raw-image



3-2、計算元素數量

大概介紹完陣列的主要功能,接下來就介紹一些實用的語法,並嘗試在鏈結串列中進行實作,第一個是count,這個函數可以統計指定元素在串列中出現的個數,語法為list.count(指定元素)。若要在鏈結串列中實作,我們可以初始化一個計數器,並走訪所有節點,將鏈結串列中所有等於指定元素的節點個數計算出來。


3-3、 反轉功能

在靜態串列中要進行反轉相當容易,方法為list.reverse(),此函數會直接更改list內容。但在鏈結串列中,順序的反轉就需要經過特別設計,我們首先宣告兩個變數temp與prev來儲存節點資訊,從第一個資料點開始進行迴圈。

將第一個資料節點的next屬性存進temp,並將next改為前位節點(第一次是預設的None),接著將自己存為prev,當作下個迴圈的前位節點,接著移動到下一個節點位置繼續此四步驟。當更改完最後一個迴圈時,我們還要將head的next屬性改到最後一個節點位置,於是將head.next設為prev所儲存的最後一個節點。


raw-image

上圖是鏈結串列反轉的示意圖,後面迴圈的邏輯都一樣,紅框代表在一次迴圈中會被更動到的變數,這個部分比較困難,應該也還有更好的做法,都歡迎討論看看XD。以上部分就是Python陣列的主要介紹,下一節我們會繼續介紹鏈結串列的延伸與實作,有任何問題歡迎寄信至我的信箱或於底下留言和我討論。



參考書目

  1. 圖解資料結構 - 使用Python(第二版)
  2. 圖書演算法 - 使用Python
  3. Python3 物件導向程式設計 第二版
  4. 精通Python (第二版)


留言
avatar-img
留言分享你的想法!
avatar-img
炯男孩的沙龍
4會員
8內容數
本專題將以Python程式語言來實作資料結構,依序從陣列(Array)、堆疊(Stack)、佇列(Queue)、樹(Tree)到圖(Graph),透過不同方式來建立資料結構,並討論部分細節如:建構難度、記憶體空間、效率等等。
炯男孩的沙龍的其他內容
2022/08/09
本文為陣列實作的延伸,特別介紹鏈結串列不同的方式,以解決一些常發生在鏈結串列上的問題,並比較不同做法的優缺點。
Thumbnail
2022/08/09
本文為陣列實作的延伸,特別介紹鏈結串列不同的方式,以解決一些常發生在鏈結串列上的問題,並比較不同做法的優缺點。
Thumbnail
2022/07/08
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。
Thumbnail
2022/07/08
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。
Thumbnail
2022/07/07
陣列是Python語言的最基礎也最容易實作的資料結構,主要可以透過兩種方式在Python上實踐陣列,其中一種是靜態結構 - 串列(List),另一種則是動態結構 - 鏈結串列(Linked List)。 我們會依序介紹這兩種作法如何在Python上執行陣列的相關功能,並比較兩種方法之間的差異。
Thumbnail
2022/07/07
陣列是Python語言的最基礎也最容易實作的資料結構,主要可以透過兩種方式在Python上實踐陣列,其中一種是靜態結構 - 串列(List),另一種則是動態結構 - 鏈結串列(Linked List)。 我們會依序介紹這兩種作法如何在Python上執行陣列的相關功能,並比較兩種方法之間的差異。
Thumbnail
看更多
你可能也想看
Thumbnail
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
Thumbnail
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
探索Python學習筆記中列表的建立、存取和常用方法。從使用中括號定義列表到了解索引、新增、刪除、修改等操作,並介紹append、remove、count等常用方法。
Thumbnail
資料集中除了陣列這個外,還有另一個好幫手就是List,它跟陣列很像,我們直接來看一下怎麼用: 它的語法: 1.給予值 (1)單一新增: (2)陣列式新增: 例子: 2.取值 (1)foreach迴圈方式 (2)單一取值 3.取得List有多少個內容值 4.排序 想要反轉就再使用↓ 5.插入 6.複製
Thumbnail
資料集中除了陣列這個外,還有另一個好幫手就是List,它跟陣列很像,我們直接來看一下怎麼用: 它的語法: 1.給予值 (1)單一新增: (2)陣列式新增: 例子: 2.取值 (1)foreach迴圈方式 (2)單一取值 3.取得List有多少個內容值 4.排序 想要反轉就再使用↓ 5.插入 6.複製
Thumbnail
陣列運用、擷取字串   對於陣列裡的內容值除了把資料存進去外,若想要知道陣列維度、陣列大小、複製陣列的值到另一個陣列中、清除陣列的值等等的相關處理,甚至比較常用到的可能還需要做資料排列、查找資料等等,此時C#有一些屬性方法可以幫助到我們,不用寫複雜的迴圈,來看一看有哪些吧~
Thumbnail
陣列運用、擷取字串   對於陣列裡的內容值除了把資料存進去外,若想要知道陣列維度、陣列大小、複製陣列的值到另一個陣列中、清除陣列的值等等的相關處理,甚至比較常用到的可能還需要做資料排列、查找資料等等,此時C#有一些屬性方法可以幫助到我們,不用寫複雜的迴圈,來看一看有哪些吧~
Thumbnail
Array 在記憶體中連續分配,而且元素類型是一樣的,長度不變 優點:讀取快,可以使用座標訪問 缺點:新增、刪除慢 記憶體: 📷 範例程式碼: ArrayList 不定長度,在記憶體中連續分配的,元素沒有類型限制,任何元素都是當成object處理,如果是值類型,會有裝箱的操作 優點:讀取快 缺點:
Thumbnail
Array 在記憶體中連續分配,而且元素類型是一樣的,長度不變 優點:讀取快,可以使用座標訪問 缺點:新增、刪除慢 記憶體: 📷 範例程式碼: ArrayList 不定長度,在記憶體中連續分配的,元素沒有類型限制,任何元素都是當成object處理,如果是值類型,會有裝箱的操作 優點:讀取快 缺點:
Thumbnail
本篇文章將會介紹陣列的排列、反轉、清除、擴增等方法,能協助程式員在撰寫程式時的操作,並會介紹字元相關的方法。
Thumbnail
本篇文章將會介紹陣列的排列、反轉、清除、擴增等方法,能協助程式員在撰寫程式時的操作,並會介紹字元相關的方法。
Thumbnail
本文會介紹靜態結構 - 串列(List)與動態結構 - 鏈結串列(Linked List)來實踐陣列的不同功能,如:刪除、計算元素個數與反轉。
Thumbnail
本文會介紹靜態結構 - 串列(List)與動態結構 - 鏈結串列(Linked List)來實踐陣列的不同功能,如:刪除、計算元素個數與反轉。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News