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

閱讀時間約 4 分鐘
陣列的最後一講
各位好,今天接續從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屬性來刻意的丟失該節點資料,使鏈結串列在尋訪過程中不被走訪。

3-2、計算元素數量

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

3-3、 反轉功能

在靜態串列中要進行反轉相當容易,方法為list.reverse(),此函數會直接更改list內容。但在鏈結串列中,順序的反轉就需要經過特別設計,我們首先宣告兩個變數temp與prev來儲存節點資訊,從第一個資料點開始進行迴圈。
將第一個資料節點的next屬性存進temp,並將next改為前位節點(第一次是預設的None),接著將自己存為prev,當作下個迴圈的前位節點,接著移動到下一個節點位置繼續此四步驟。當更改完最後一個迴圈時,我們還要將head的next屬性改到最後一個節點位置,於是將head.next設為prev所儲存的最後一個節點。
上圖是鏈結串列反轉的示意圖,後面迴圈的邏輯都一樣,紅框代表在一次迴圈中會被更動到的變數,這個部分比較困難,應該也還有更好的做法,都歡迎討論看看XD。以上部分就是Python陣列的主要介紹,下一節我們會繼續介紹鏈結串列的延伸與實作,有任何問題歡迎寄信至我的信箱或於底下留言和我討論。

參考書目

  1. 圖解資料結構 - 使用Python(第二版)
  2. 圖書演算法 - 使用Python
  3. Python3 物件導向程式設計 第二版
  4. 精通Python (第二版)
3會員
8內容數
本專題將以Python程式語言來實作資料結構,依序從陣列(Array)、堆疊(Stack)、佇列(Queue)、樹(Tree)到圖(Graph),透過不同方式來建立資料結構,並討論部分細節如:建構難度、記憶體空間、效率等等。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
從零開始學python—資料型態在程式中,了解資料型態是相當重要的。 為什麽? 因為許多error,常常都是因為資料型態不正確所導致的。 舉個例子,在python中: a = 1 + 2 print(a) 結果就是3 a = = "1"+"2" print(a) 結果就是12 是不是差很多? 所以今天我來介
Thumbnail
avatar
媗日
2024-04-08
從零開始學python—print( )基本語法本文詳細解說了 Python print() 函數的各種隱藏語法,包括 value、sep、end、file 和 flush。作者以清晰的範例和解說,讓從未接觸程式語言的人也能夠理解。而最後提到了訂閱房間的付費方式,並歡迎大家訂閱。文章內容較為詳細,提供了豐富的資訊。
Thumbnail
avatar
媗日
2024-04-04
【從AKB48到Python: 我的語言學習故事】我從追星AKB48開始燃起了學語言的熱情。 又在研究Python的程式語言原理,撬開了語言學的大門。
Thumbnail
avatar
王啟樺
2023-10-04
Python程式設計的無盡魅力:從背後的冷知識到實用技巧在21世紀的技術浪潮中,「Python」不僅是程式設計的代表性語言,更是從初學者到資深工程師的共同選擇。除了在網頁開發、大數據和AI等專業領域中的應用,Python在全球的開發者社群中也建立了一個繁榮的生態系統,推動技術進步。然而,背後還隱藏著許多鮮為人知的故事和趣味,等待著我們去探索與發掘。
Thumbnail
avatar
Winson Li
2023-08-22
Python 部署到 Zeabur,從 Railway.app 搬出來了!Railway.app 價格方案即將改變,趁著今天有空測試了一下 Zeabur,很舒服的感覺。
Thumbnail
avatar
Liu Will
2023-07-31
【深智書摘】不管你是不是電腦業的從業人員,你都應該學會Python及至少一種人工智慧的框架!馬克•庫班(NBA獨行俠隊老闆,億萬富翁)說過:「人工智慧、深度學習和機器學習,不論你現在是否能夠理解這些概念,你都應該學習。否則三年內,你就會像被滅絕的恐龍一樣被社會淘汰。現在不開始,以後就來不及了。」
Thumbnail
avatar
深智數位
2023-02-20
從人氣漫畫看時代想法的轉變-英雄再強終究對抗不了社會結構最近因為眼睛出了問題,再加上政策提案等等大事件交雜而停更了好一陣子。這篇會提到的漫畫跟遊戲作品幾部:咒術迴戰、進擊的巨人、鬼滅之刃、怪獸8號、巫師(狩魔人)
Thumbnail
avatar
東京裏物語
2022-03-05
從認識「足部結構」來挑好鞋(下)!關於健康鞋的選擇與建議 這篇我想跟您說 1 健康鞋背後的設計原理 2 常見的健康鞋設計 3 選擇健康鞋的時機
Thumbnail
avatar
洪岳裕
2019-06-29
從認識「足部結構」來挑好鞋(上)!物理治療師教你五大關鍵挑好鞋俗話說「養樹護根,養人護足。」足部是我們步行走路時的唯一接觸點,足部不穩,上面的身體也會跟著歪。在我們治療理念裡,最重視的就是「脊」與「足」。
Thumbnail
avatar
洪岳裕
2019-06-28
從生活認識微積分(八)「瞬時」與「平均」變化率在前幾篇文章中,透過許多生活例子,如:經過幾分後,計算火鍋湯溫度對時間的平均變化率;又或者計算植物的平均生長速度,讓讀者了解,斜率是由兩個變量相除計算而來,對於「斜率」有深刻了解。此篇文章則將帶領讀者,由生活中的時間間隔,進一步思考「瞬時」與「平均」變化率之間的差異。
Thumbnail
avatar
Caspar
2018-08-11