Python中的資料結構

重磅乾貨,第一時間送達

本文轉自:磐創AI

概述

在深入研究資料科學和模型構建之前,Python中的資料結構是一個需要學習的關鍵概念

瞭解Python提供的不同資料結構,包括列表、元組等

介紹

資料結構聽起來是一個非常直截了當的話題,但許多資料科學和分析的新手並不知道它是什麼。當我詢問這些人關於Python中不同的資料結構以及它們是如何工作的時,他們一片空白。

Python是一種很容易學習的程式語言,但是我們需要先弄清楚我們的基本知識,然後再深入研究有吸引力的機器學習。這是因為在我們執行的每一個數據探索任務背後,甚至在我們採取的分析步驟背後,都有一個數據儲存和組織的基本元素。

而且這是一個無需考慮的問題——當我們高效地儲存資料時,提取資訊變得非常容易。由於我們的程式碼執行得更快,我們節省了大量的時間——誰不希望這樣呢?

所以我希望你掌握Python中的資料結構。

Python中的資料結構

在本文中,我們將探討Python中的基本內建資料結構,當你在現實世界中處理資料時,這些結構將非常有用。所以無論你是資料科學家還是分析師,這篇文章對你來說都同樣重要。

目錄

Python中的資料結構

資料結構1:Python中的列表

建立列表

訪問列表元素

在列表中追加值

從列表中刪除元素

排序列表

串聯列表

列表解析

使用列表堆疊和佇列

資料結構2:Python中的元組

在Python中建立元組

元組的不變性

元組賦值

更改元組值

資料結構3:Python中的字典

生成字典

訪問鍵和值

資料結構4:Python中的集合

從集合中新增和刪除元素

集合的操作

Python中的資料結構

「資料結構」

是高效儲存和組織資料的一種方法。這將允許你輕鬆訪問和執行資料操作。

在資料結構方面,沒有一種適合所有型別的模型。你將需要以不同的方式儲存資料,以滿足一時需要。也許你想把所有型別的資料儲存在一起,或者你想要一些更快的資料搜尋,或者一些只儲存不同資料項的東西。

幸運的是,Python有許多內建的資料結構,可以幫助我們輕鬆地組織資料。因此,有必要先了解這些,以便我們在處理資料時,確切地知道哪些資料結構將有效地解決我們的目的。

資料結構1:Python中的列表

Python中的列表是最通用的資料結構。它們用於儲存異構資料項,從整數到字串,甚至是另一個列表!它們也是可變的,這意味著即使在建立列表之後,它們的元素也可以更改。

建立列表

列表是透過將元素括在[]內建立的,每個項用逗號分隔:

Python中的資料結構

由於列表中的每個元素都有自己不同的位置,因此在列表中具有重複的值不是問題:

Python中的資料結構

訪問列表元素

要訪問列表的元素,我們使用索引。列表中的每個元素都有一個與其相關的索引,這取決於它在列表中的位置。列表的第一個元素有索引0,下一個元素有索引1,依此類推。列表的最後一個元素的索引小於列表的長度。

但索引不一定總是正的,也可能是負的。你認為負索引意味著什麼?

正索引從列表開始開始計數,而負索引從列表末尾開始計數。如果我們想從列表的末尾返回第n個元素,這就避免了我們必須執行的瑣碎計算。因此,對於列表的最後一項,我們不需要返回List_name[len(List_name)-1]元素,只需編寫List_name[-1]。

使用負索引,我們可以輕鬆地返回列表末尾的第n個元素。如果我們想從結尾返回第一個元素,或者最後一個索引,那麼關聯的索引是-1。類似地,倒數第二個元素的索引將是-2,依此類推。記住,第0個索引仍然引用列表中的第一個元素。

Python中的資料結構

但是如果我們想返回列表中兩個位置之間的一系列元素呢?這叫做切片。我們要做的就是指定開始和結束索引,例如List_name[start : end]。

Python中的資料結構

這裡要記住的一件重要的事情是,結束索引處的元素永遠不包含在內。只返回從開start索引到等於end-1索引的元素。

在列表中追加值

我們可以使用**append()**或

「insert()」

方法向現有列表中新增新元素:

「append()」

,在列表末尾新增一個元素

「insert()」

,在指定的特定位置將元素新增到列表

Python中的資料結構

從列表中刪除元素

從列表中刪除元素與新增元素一樣簡單,可以使用**remove()

「或」

pop()**方法完成:

「remove()」

–從列表中刪除與給定值匹配的第一個匹配項

「pop()」

–當我們要從列表中移除指定索引處的元素時使用。但是,如果我們不提供索引值,最後一個元素將從列表中刪除

Python中的資料結構

排序列表

大多數情況下,你將使用列表對元素進行排序。因此瞭解**sort()**方法非常重要。它允許你按升序或降序對列表元素進行就地排序:

Python中的資料結構

但是當你想要對包含字串元素的列表進行排序時,事情就變得有點棘手了。你如何比較兩個字串?好吧,字串值是使用字串中字元的ASCII值排序的。字串中的每個字元都有一個與其關聯的整數值。我們使用這些值對字串進行排序。

在比較兩個字串時,我們只是從一開始比較每個字元的整數值。如果在兩個字串中遇到相同的字元,我們只需比較下一個字元,直到找到兩個不同的字元。當然,這是內部完成的,所以你不必擔心!

Python中的資料結構

合併列表

我們甚至可以透過簡單地使用+符號連線兩個或多個列表。這將返回一個新列表,其中包含兩個列表中的元素:

列表解析

列表的一個非常有趣的應用是列表解析,它提供了一種建立新列表的簡潔方法。這些新列表是透過對現有列表的每個元素應用操作建立的。如果我們首先檢查一下如何使用舊的for迴圈來完成它:

Python中的資料結構

現在,我們將看到如何使用列表理解簡潔地執行此操作:

Python中的資料結構

看到區別了嗎?列表解析對於任何資料科學家來說都是一項有用的語法,因為你可以看到和編寫簡明易讀的程式碼!

堆疊和佇列

列表是Python中內建的資料結構。但我們可以使用它來建立使用者定義的資料結構。使用列表構建的兩種非常流行的使用者定義資料結構是棧和佇列。

棧是一個元素列表,其中元素的新增或刪除是從列表的末尾開始的。把它想象成一堆書。當你需要從書堆中新增或刪除一本書時,你可以從頂部開始。它使用了後進先出的簡單概念。

另一方面,佇列是一個元素列表,其中元素的添加發生在列表的末尾,而元素的刪除則發生在列表的前面。你可以把它想象成現實世界中的一個佇列。當前面的人離開佇列時,佇列變短。當有新成員從末尾新增到佇列中時,佇列將變長。它使用先進先出的概念。

現在,作為一個數據科學家或分析師,你可能不是每天都在使用這個概念,但是當你必須構建自己的演算法時,它肯定會幫助你!

資料結構2:Python中的元組

元組是Python中另一種非常流行的內建資料結構。它們與列表非常相似,只不過有一個區別,它們是不可變的。這意味著一旦生成元組,就不能新增、刪除或編輯任何值。

我們將進一步探討這個問題,但首先讓我們看看如何在Python中建立元組!

在Python中建立元組

元組可以透過在(括號)內寫入值來生成,每個元素用逗號分隔。但是,即使你寫了一堆沒有任何括號的值並把它們賦給一個變數,你最終還是會得到一個元組!

Python中的資料結構

好了,現在我們知道了如何建立元組,讓我們討論一下不變性。

元組的不變性

在Python中,任何在建立後不能修改的內容都是不可變的。Python語言可以分解為可變和不可變的物件。

列表、字典、集合(我們將在後面的章節中探討這些)是可變物件,這意味著它們可以在建立後修改。另一方面,整數、浮點數、布林值、字串甚至元組都是不可變的物件。但是,是什麼使它們不可改變呢?

Python中的所有內容都是一個物件。所以我們可以使用內建的**id()**方法來檢查物件的記憶體位置。這被稱為物件的標識。讓我們建立一個列表並確定列表及其元素的位置:

Python中的資料結構

如你所見,列表及其元素在記憶體中都有不同的位置。因為我們知道列表是可變的,所以我們可以改變其元素的值。讓我們這樣做,看看它如何影響:

Python中的資料結構

列表的位置沒有改變,但元素的位置改變了。這意味著為元素建立了一個新物件並儲存在列表中。這就是可變的意思。可變物件可以在建立後更改其狀態或內容,但不可變物件不能這樣做。

但是我們可以呼叫元組偽不可變,因為即使它們是不可變的,它們也可以包含其值可以修改的可變物件!

從上面的示例中可以看到,我們能夠更改元組中包含的不可變物件list的值。

元組賦值

元組打包和解包是一些有用的操作,你可以執行這些操作來將值賦給單行中另一個元組。

當我們製造元組時,我們已經看到了元組的打包。元組解包與打包相反。

Python中的資料結構

它對於在一行中交換值非常有用。老實說,這是讓我對Python感到興奮的第一件事,能夠用這麼少的程式碼做這麼多事情!

更改元組值

雖然我說過元組值不能更改,但實際上可以透過使用list()將其轉換為列表來對其進行更改。完成更改後,可以再次使用tuple()將其轉換回元組。

Python中的資料結構

然而,這種更改非常昂貴,因為它需要複製元組。但是,當你不希望其他人更改資料結構的內容時,元組就派上了用場。

資料結構3:Python中的字典

Dictionary是另一種Python資料結構,用於儲存不可變但無序的異構物件。這意味著當你試圖訪問這些元素時,它們的順序可能與你插入它們的順序不完全相同。

但是,使詞典與列表區別開來的是元素在其中的儲存方式。字典中的元素是透過它們的鍵值而不是它們的索引來訪問的,正如我們在列表中所做的那樣。所以字典包含鍵值對,而不僅僅是單個元素。

生成詞典

字典是透過{}括號內寫入鍵和值生成的。每個鍵值對用逗號分隔:

使用鍵,我們可以輕鬆提取關聯值:

Python中的資料結構

這些鍵是獨一無二的。但是,即使字典中有多個項具有相同的鍵,項的值為最後一個鍵關聯的值:

字典對於快速訪問項非常有用,因為與列表和元組不同,字典不必遍歷所有找到值的項。字典使用雜湊提高效能。

訪問鍵和值

你可以使用

「keys()」

方法從字典訪問鍵,使用**values()

「方法訪問值。我們可以使用for迴圈檢視它們,也可以使用」

list()**將它們轉換為列表:

Python中的資料結構

我們甚至可以使用**items()**方法同時訪問這些值,該方法返回字典中每個元素的相應鍵值對。

Python中的資料結構

資料結構4:Python中的集合

有時不希望在列表或元組中多次出現同一個元素。在這裡,你可以使用

「集合」

資料結構。Set是一個無序但可變的元素集合,它只包含唯一的值。

你將看到這些值的順序與在集合中輸入的順序不同。這是因為集合是無序的。

從集合中新增和移除元素

要向集合中新增值,請使用**add()**方法。它允許你新增除可變物件以外的任何值:

Python中的資料結構

要從集合中移除值,有兩個選項可供選擇:

第一個是**remove()**方法,如果元素不在集合中,它會給出一個錯誤

第二個是

「discard()」

方法,它刪除元素,但當元素不在集合中時不會出錯

如果該值不存在,

「remove()「將給出一個錯誤,而」discard()」

則不會。

Python中的資料結構

集合操作

使用Python集,你可以執行兩個集之間的並集、交集和差集等操作,就像在數學中一樣。

兩個集合的並集給出兩個集合的值。但這些值是獨一無二的。因此,如果兩個集合包含相同的值,則只返回一個副本:

兩個集合的交集只返回兩個集合共有的值:

Python中的資料結構

一個集合與另一個集合的差集只給出第一個集合中不存在的值:

結尾

Python是一種漂亮的語言。它為你提供了許多選項來更有效地處理資料。學習Python中的資料結構是你學習過程中的一個關鍵。

下載1:OpenCV-Contrib擴充套件模組中文版教程

下載2:Python視覺實戰專案52講

下載3:OpenCV實戰專案20講