作者|ANIRUDDHA BHANDARI
編譯|VK
來源|Analytics Vidhya
概述
-
在深入研究資料科學和模型構建之前,Python中的資料結構是一個需要學習的關鍵概念
-
了解Python提供的不同資料結構,包括串列、元組等
介紹
資料結構聽起來是一個非常直截了當的話題,但許多資料科學和分析的新手并不知道它是什么,當我詢問這些人關于Python中不同的資料結構以及它們是如何作業的時,他們一片空白,
Python是一種很容易學習的編程語言,但是我們需要先弄清楚我們的基本知識,然后再深入研究有吸引力的機器學習,這是因為在我們執行的每一個資料探索任務背后,甚至在我們采取的分析步驟背后,都有一個資料存盤和組織的基本元素,
而且這是一個無需考慮的問題——當我們高效地存盤資料時,提取資訊變得非常容易,由于我們的代碼運行得更快,我們節省了大量的時間——誰不希望這樣呢?
所以我希望你掌握Python中的資料結構,

在本文中,我們將探討Python中的基本內置資料結構,當你在現實世界中處理資料時,這些結構將非常有用,所以無論你是資料科學家還是分析師,這篇文章對你來說都同樣重要,
目錄
-
Python中的資料結構
-
資料結構1:Python中的串列
- 創建串列
- 訪問串列元素
- 在串列中追加值
- 從串列中洗掉元素
- 排序串列
- 串聯串列
- 串列決議
- 使用串列堆疊和佇列
-
資料結構2:Python中的元組
- 在Python中創建元組
- 元組的不變性
- 元組賦值
- 更改元組值
-
資料結構3:Python中的字典
- 生成字典
- 訪問鍵和值
-
資料結構4:Python中的集合
- 從集合中添加和洗掉元素
- 集合的操作
Python中的資料結構
資料結構是高效存盤和組織資料的一種方法,這將允許你輕松訪問和執行資料操作,
在資料結構方面,沒有一種適合所有型別的模型,你將需要以不同的方式存盤資料,以滿足一時需要,也許你想把所有型別的資料存盤在一起,或者你想要一些更快的資料搜索,或者一些只存盤不同資料項的東西,
幸運的是,Python有許多內置的資料結構,可以幫助我們輕松地組織資料,因此,有必要先了解這些,以便我們在處理資料時,確切地知道哪些資料結構將有效地解決我們的目的,
資料結構1:Python中的串列
Python中的串列是最通用的資料結構,它們用于存盤異構資料項,從整數到字串,甚至是另一個串列!它們也是可變的,這意味著即使在創建串列之后,它們的元素也可以更改,
創建串列
串列是通過將元素括在[]內創建的,每個項用逗號分隔:

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

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

但索引不一定總是正的,也可能是負的,你認為負索引意味著什么?
正索引從串列開始開始計數,而負索引從串列末尾開始計數,如果我們想從串列的末尾回傳第n個元素,這就避免了我們必須執行的瑣碎計算,因此,對于串列的最后一項,我們不需要回傳List_name[len(List_name)-1] 元素,只需撰寫List_name[-1],
使用負索引,我們可以輕松地回傳串列末尾的第n個元素,如果我們想從結尾回傳第一個元素,或者最后一個索引,那么關聯的索引是-1,類似地,倒數第二個元素的索引將是-2,依此類推,記住,第0個索引仍然參考串列中的第一個元素,

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

這里要記住的一件重要的事情是,結束索引處的元素永遠不包含在內,只回傳從開start索引到等于end-1索引的元素,
在串列中追加值
我們可以使用append()或 insert() 方法向現有串列中添加新元素:
- append(),在串列末尾添加一個元素
- insert(),在指定的特定位置將元素添加到串列

從串列中洗掉元素
從串列中洗掉元素與添加元素一樣簡單,可以使用remove()或pop()方法完成:
- remove()–從串列中洗掉與給定值匹配的第一個匹配項
- pop()–當我們要從串列中移除指定索引處的元素時使用,但是,如果我們不提供索引值,最后一個元素將從串列中洗掉

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

但是當你想要對包含字串元素的串列進行排序時,事情就變得有點棘手了,你如何比較兩個字串?好吧,字串值是使用字串中字符的ASCII值排序的,字串中的每個字符都有一個與其關聯的整數值,我們使用這些值對字串進行排序,
在比較兩個字串時,我們只是從一開始比較每個字符的整數值,如果在兩個字串中遇到相同的字符,我們只需比較下一個字符,直到找到兩個不同的字符,當然,這是內部完成的,所以你不必擔心!

合并串列
我們甚至可以通過簡單地使用+符號連接兩個或多個串列,這將回傳一個新串列,其中包含兩個串列中的元素:

串列決議
串列的一個非常有趣的應用是串列決議,它提供了一種創建新串列的簡潔方法,這些新串列是通過對現有串列的每個元素應用操作創建的,如果我們首先檢查一下如何使用舊的for回圈來完成它:

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

看到區別了嗎?串列決議對于任何資料科學家來說都是一項有用的語法,因為你可以看到和撰寫簡明易讀的代碼!
堆疊和佇列
串列是Python中內置的資料結構,但我們可以使用它來創建用戶定義的資料結構,使用串列構建的兩種非常流行的用戶定義資料結構是堆疊和佇列,
堆疊是一個元素串列,其中元素的添加或洗掉是從串列的末尾開始的,把它想象成一堆書,當你需要從書堆中添加或洗掉一本書時,你可以從頂部開始,它使用了后進先出的簡單概念,

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

現在,作為一個資料科學家或分析師,你可能不是每天都在使用這個概念,但是當你必須構建自己的演算法時,它肯定會幫助你!
資料結構2:Python中的元組
元組是Python中另一種非常流行的內置資料結構,它們與串列非常相似,只不過有一個區別,它們是不可變的,這意味著一旦生成元組,就不能添加、洗掉或編輯任何值,
我們將進一步探討這個問題,但首先讓我們看看如何在Python中創建元組!
在Python中創建元組
元組可以通過在(括號)內寫入值來生成,每個元素用逗號分隔,但是,即使你寫了一堆沒有任何括號的值并把它們賦給一個變數,你最侄訓是會得到一個元組!

好了,現在我們知道了如何創建元組,讓我們討論一下不變性,
元組的不變性
在Python中,任何在創建后不能修改的內容都是不可變的,Python語言可以分解為可變和不可變的物件,
串列、字典、集合(我們將在后面的章節中探討這些)是可變物件,這意味著它們可以在創建后修改,另一方面,整數、浮點數、布林值、字串甚至元組都是不可變的物件,但是,是什么使它們不可改變呢?
Python中的所有內容都是一個物件,所以我們可以使用內置的id()方法來檢查物件的記憶體位置,這被稱為物件的標識,讓我們創建一個串列并確定串列及其元素的位置:

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

串列的位置沒有改變,但元素的位置改變了,這意味著為元素創建了一個新物件并保存在串列中,這就是可變的意思,可變物件可以在創建后更改其狀態或內容,但不可變物件不能這樣做,
但是我們可以呼叫元組偽不可變,因為即使它們是不可變的,它們也可以包含其值可以修改的可變物件!

從上面的示例中可以看到,我們能夠更改元組中包含的不可變物件list的值,
元組賦值
元組打包和解包是一些有用的操作,你可以執行這些操作來將值賦給單行中另一個元組,
當我們制造元組時,我們已經看到了元組的打包,元組解包與打包相反,

它對于在一行中交換值非常有用,老實說,這是讓我對Python感到興奮的第一件事,能夠用這么少的代碼做這么多事情!
更改元組值
雖然我說過元組值不能更改,但實際上可以通過使用list()將其轉換為串列來對其進行更改,完成更改后,可以再次使用tuple()將其轉換回元組,

然而,這種更改非常昂貴,因為它需要復制元組,但是,當你不希望其他人更改資料結構的內容時,元組就派上了用場,
資料結構3:Python中的字典
Dictionary是另一種Python資料結構,用于存盤不可變但無序的異構物件,這意味著當你試圖訪問這些元素時,它們的順序可能與你插入它們的順序不完全相同,
但是,使詞典與串列區別開來的是元素在其中的存盤方式,字典中的元素是通過它們的鍵值而不是它們的索引來訪問的,正如我們在串列中所做的那樣,所以字典包含鍵值對,而不僅僅是單個元素,
生成詞典
字典是通過{}括號內寫入鍵和值生成的,每個鍵值對用逗號分隔:

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

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

字典對于快速訪問項非常有用,因為與串列和元組不同,字典不必遍歷所有找到值的項,字典使用哈希提高性能,
訪問鍵和值
你可以使用 keys() 方法從字典訪問鍵,使用values()方法訪問值,我們可以使用for回圈查看它們,也可以使用list()將它們轉換為串列:

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

資料結構4:Python中的集合
有時不希望在串列或元組中多次出現同一個元素,在這里,你可以使用集合資料結構,Set是一個無序但可變的元素集合,它只包含唯一的值,

你將看到這些值的順序與在集合中輸入的順序不同,這是因為集合是無序的,
從集合中添加和移除元素
要向集合中添加值,請使用add()方法,它允許你添加除可變物件以外的任何值:

要從集合中移除值,有兩個選項可供選擇:
-
第一個是remove()方法,如果元素不在集合中,它會給出一個錯誤
-
第二個是discard() 方法,它洗掉元素,但當元素不在集合中時不會出錯

如果該值不存在,remove()將給出一個錯誤,而discard() 則不會,

集合操作
使用Python集,你可以執行兩個集之間的并集、交集和差集等操作,就像在數學中一樣,
兩個集合的并集給出兩個集合的值,但這些值是獨一無二的,因此,如果兩個集合包含相同的值,則只回傳一個副本:

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

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

結尾
Python是一種漂亮的語言,它為你提供了許多選項來更有效地處理資料,學習Python中的資料結構是你學習程序中的一個關鍵,
原文鏈接:https://www.analyticsvidhya.com/blog/2020/06/data-structures-python/
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方檔案:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14690.html
標籤:其他
上一篇:深入淺出Transformer
下一篇:YOLO V4的模型訓練
