從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 (第二版)
avatar-img
4會員
8內容數
本專題將以Python程式語言來實作資料結構,依序從陣列(Array)、堆疊(Stack)、佇列(Queue)、樹(Tree)到圖(Graph),透過不同方式來建立資料結構,並討論部分細節如:建構難度、記憶體空間、效率等等。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
炯男孩的沙龍 的其他內容
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。
陣列是Python語言的最基礎也最容易實作的資料結構,主要可以透過兩種方式在Python上實踐陣列,其中一種是靜態結構 - 串列(List),另一種則是動態結構 - 鏈結串列(Linked List)。 我們會依序介紹這兩種作法如何在Python上執行陣列的相關功能,並比較兩種方法之間的差異。
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。
陣列是Python語言的最基礎也最容易實作的資料結構,主要可以透過兩種方式在Python上實踐陣列,其中一種是靜態結構 - 串列(List),另一種則是動態結構 - 鏈結串列(Linked List)。 我們會依序介紹這兩種作法如何在Python上執行陣列的相關功能,並比較兩種方法之間的差異。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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
馬克•庫班(NBA獨行俠隊老闆,億萬富翁)說過:「人工智慧、深度學習和機器學習,不論你現在是否能夠理解這些概念,你都應該學習。否則三年內,你就會像被滅絕的恐龍一樣被社會淘汰。現在不開始,以後就來不及了。」
Thumbnail
最近因為眼睛出了問題,再加上政策提案等等大事件交雜而停更了好一陣子。這篇會提到的漫畫跟遊戲作品幾部:咒術迴戰、進擊的巨人、鬼滅之刃、怪獸8號、巫師(狩魔人)
Thumbnail
這篇我想跟您說 1 健康鞋背後的設計原理 2 常見的健康鞋設計 3 選擇健康鞋的時機
Thumbnail
俗話說「養樹護根,養人護足。」足部是我們步行走路時的唯一接觸點,足部不穩,上面的身體也會跟著歪。在我們治療理念裡,最重視的就是「脊」與「足」。
Thumbnail
在前幾篇文章中,透過許多生活例子,如:經過幾分後,計算火鍋湯溫度對時間的平均變化率;又或者計算植物的平均生長速度,讓讀者了解,斜率是由兩個變量相除計算而來,對於「斜率」有深刻了解。此篇文章則將帶領讀者,由生活中的時間間隔,進一步思考「瞬時」與「平均」變化率之間的差異。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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
馬克•庫班(NBA獨行俠隊老闆,億萬富翁)說過:「人工智慧、深度學習和機器學習,不論你現在是否能夠理解這些概念,你都應該學習。否則三年內,你就會像被滅絕的恐龍一樣被社會淘汰。現在不開始,以後就來不及了。」
Thumbnail
最近因為眼睛出了問題,再加上政策提案等等大事件交雜而停更了好一陣子。這篇會提到的漫畫跟遊戲作品幾部:咒術迴戰、進擊的巨人、鬼滅之刃、怪獸8號、巫師(狩魔人)
Thumbnail
這篇我想跟您說 1 健康鞋背後的設計原理 2 常見的健康鞋設計 3 選擇健康鞋的時機
Thumbnail
俗話說「養樹護根,養人護足。」足部是我們步行走路時的唯一接觸點,足部不穩,上面的身體也會跟著歪。在我們治療理念裡,最重視的就是「脊」與「足」。
Thumbnail
在前幾篇文章中,透過許多生活例子,如:經過幾分後,計算火鍋湯溫度對時間的平均變化率;又或者計算植物的平均生長速度,讓讀者了解,斜率是由兩個變量相除計算而來,對於「斜率」有深刻了解。此篇文章則將帶領讀者,由生活中的時間間隔,進一步思考「瞬時」與「平均」變化率之間的差異。