<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python中的數(shù)據(jù)結(jié)構(gòu)

          共 5296字,需瀏覽 11分鐘

           ·

          2021-06-24 19:18

          點(diǎn)擊上方小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          本文轉(zhuǎn)自:磐創(chuàng)AI

          概述
          • 在深入研究數(shù)據(jù)科學(xué)和模型構(gòu)建之前,Python中的數(shù)據(jù)結(jié)構(gòu)是一個(gè)需要學(xué)習(xí)的關(guān)鍵概念

          • 了解Python提供的不同數(shù)據(jù)結(jié)構(gòu),包括列表、元組等

          介紹

          數(shù)據(jù)結(jié)構(gòu)聽(tīng)起來(lái)是一個(gè)非常直截了當(dāng)?shù)脑掝},但許多數(shù)據(jù)科學(xué)和分析的新手并不知道它是什么。當(dāng)我詢問(wèn)這些人關(guān)于Python中不同的數(shù)據(jù)結(jié)構(gòu)以及它們是如何工作的時(shí),他們一片空白。

          Python是一種很容易學(xué)習(xí)的編程語(yǔ)言,但是我們需要先弄清楚我們的基本知識(shí),然后再深入研究有吸引力的機(jī)器學(xué)習(xí)。這是因?yàn)樵谖覀儓?zhí)行的每一個(gè)數(shù)據(jù)探索任務(wù)背后,甚至在我們采取的分析步驟背后,都有一個(gè)數(shù)據(jù)存儲(chǔ)和組織的基本元素。

          而且這是一個(gè)無(wú)需考慮的問(wèn)題——當(dāng)我們高效地存儲(chǔ)數(shù)據(jù)時(shí),提取信息變得非常容易。由于我們的代碼運(yùn)行得更快,我們節(jié)省了大量的時(shí)間——誰(shuí)不希望這樣呢?

          所以我希望你掌握Python中的數(shù)據(jù)結(jié)構(gòu)。

          在本文中,我們將探討Python中的基本內(nèi)置數(shù)據(jù)結(jié)構(gòu),當(dāng)你在現(xiàn)實(shí)世界中處理數(shù)據(jù)時(shí),這些結(jié)構(gòu)將非常有用。所以無(wú)論你是數(shù)據(jù)科學(xué)家還是分析師,這篇文章對(duì)你來(lái)說(shuō)都同樣重要。

          目錄
          • Python中的數(shù)據(jù)結(jié)構(gòu)

          • 數(shù)據(jù)結(jié)構(gòu)1:Python中的列表

            • 創(chuàng)建列表
            • 訪問(wèn)列表元素
            • 在列表中追加值
            • 從列表中刪除元素
            • 排序列表
            • 串聯(lián)列表
            • 列表解析
            • 使用列表堆棧和隊(duì)列
          • 數(shù)據(jù)結(jié)構(gòu)2:Python中的元組

            • 在Python中創(chuàng)建元組
            • 元組的不變性
            • 元組賦值
            • 更改元組值
          • 數(shù)據(jù)結(jié)構(gòu)3:Python中的字典

            • 生成字典
            • 訪問(wèn)鍵和值
          • 數(shù)據(jù)結(jié)構(gòu)4:Python中的集合

            • 從集合中添加和刪除元素
            • 集合的操作
          Python中的數(shù)據(jù)結(jié)構(gòu)

          「數(shù)據(jù)結(jié)構(gòu)」是高效存儲(chǔ)和組織數(shù)據(jù)的一種方法。這將允許你輕松訪問(wèn)和執(zhí)行數(shù)據(jù)操作。

          在數(shù)據(jù)結(jié)構(gòu)方面,沒(méi)有一種適合所有類型的模型。你將需要以不同的方式存儲(chǔ)數(shù)據(jù),以滿足一時(shí)需要。也許你想把所有類型的數(shù)據(jù)存儲(chǔ)在一起,或者你想要一些更快的數(shù)據(jù)搜索,或者一些只存儲(chǔ)不同數(shù)據(jù)項(xiàng)的東西。

          幸運(yùn)的是,Python有許多內(nèi)置的數(shù)據(jù)結(jié)構(gòu),可以幫助我們輕松地組織數(shù)據(jù)。因此,有必要先了解這些,以便我們?cè)谔幚頂?shù)據(jù)時(shí),確切地知道哪些數(shù)據(jù)結(jié)構(gòu)將有效地解決我們的目的。

          數(shù)據(jù)結(jié)構(gòu)1:Python中的列表

          Python中的列表是最通用的數(shù)據(jù)結(jié)構(gòu)。它們用于存儲(chǔ)異構(gòu)數(shù)據(jù)項(xiàng),從整數(shù)到字符串,甚至是另一個(gè)列表!它們也是可變的,這意味著即使在創(chuàng)建列表之后,它們的元素也可以更改。

          創(chuàng)建列表

          列表是通過(guò)將元素括在[]內(nèi)創(chuàng)建的,每個(gè)項(xiàng)用逗號(hào)分隔:

          由于列表中的每個(gè)元素都有自己不同的位置,因此在列表中具有重復(fù)的值不是問(wèn)題:

          訪問(wèn)列表元素

          要訪問(wèn)列表的元素,我們使用索引。列表中的每個(gè)元素都有一個(gè)與其相關(guān)的索引,這取決于它在列表中的位置。列表的第一個(gè)元素有索引0,下一個(gè)元素有索引1,依此類推。列表的最后一個(gè)元素的索引小于列表的長(zhǎng)度。

          但索引不一定總是正的,也可能是負(fù)的。你認(rèn)為負(fù)索引意味著什么?

          正索引從列表開(kāi)始開(kāi)始計(jì)數(shù),而負(fù)索引從列表末尾開(kāi)始計(jì)數(shù)。如果我們想從列表的末尾返回第n個(gè)元素,這就避免了我們必須執(zhí)行的瑣碎計(jì)算。因此,對(duì)于列表的最后一項(xiàng),我們不需要返回List_name[len(List_name)-1] 元素,只需編寫List_name[-1]

          使用負(fù)索引,我們可以輕松地返回列表末尾的第n個(gè)元素。如果我們想從結(jié)尾返回第一個(gè)元素,或者最后一個(gè)索引,那么關(guān)聯(lián)的索引是-1。類似地,倒數(shù)第二個(gè)元素的索引將是-2,依此類推。記住,第0個(gè)索引仍然引用列表中的第一個(gè)元素。

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

          這里要記住的一件重要的事情是,結(jié)束索引處的元素永遠(yuǎn)不包含在內(nèi)。只返回從開(kāi)start索引到等于end-1索引的元素。

          在列表中追加值

          我們可以使用**append()**或 「insert()」 方法向現(xiàn)有列表中添加新元素:

          • 「append()」,在列表末尾添加一個(gè)元素
          • 「insert()」,在指定的特定位置將元素添加到列表

          從列表中刪除元素

          從列表中刪除元素與添加元素一樣簡(jiǎn)單,可以使用**remove()「或」pop()**方法完成:

          • 「remove()」–從列表中刪除與給定值匹配的第一個(gè)匹配項(xiàng)
          • 「pop()」–當(dāng)我們要從列表中移除指定索引處的元素時(shí)使用。但是,如果我們不提供索引值,最后一個(gè)元素將從列表中刪除

          排序列表

          大多數(shù)情況下,你將使用列表對(duì)元素進(jìn)行排序。因此了解**sort()**方法非常重要。它允許你按升序或降序?qū)α斜碓剡M(jìn)行就地排序:

          但是當(dāng)你想要對(duì)包含字符串元素的列表進(jìn)行排序時(shí),事情就變得有點(diǎn)棘手了。你如何比較兩個(gè)字符串?好吧,字符串值是使用字符串中字符的ASCII值排序的。字符串中的每個(gè)字符都有一個(gè)與其關(guān)聯(lián)的整數(shù)值。我們使用這些值對(duì)字符串進(jìn)行排序。

          在比較兩個(gè)字符串時(shí),我們只是從一開(kāi)始比較每個(gè)字符的整數(shù)值。如果在兩個(gè)字符串中遇到相同的字符,我們只需比較下一個(gè)字符,直到找到兩個(gè)不同的字符。當(dāng)然,這是內(nèi)部完成的,所以你不必?fù)?dān)心!

          合并列表

          我們甚至可以通過(guò)簡(jiǎn)單地使用+符號(hào)連接兩個(gè)或多個(gè)列表。這將返回一個(gè)新列表,其中包含兩個(gè)列表中的元素:

          列表解析

          列表的一個(gè)非常有趣的應(yīng)用是列表解析,它提供了一種創(chuàng)建新列表的簡(jiǎn)潔方法。這些新列表是通過(guò)對(duì)現(xiàn)有列表的每個(gè)元素應(yīng)用操作創(chuàng)建的。如果我們首先檢查一下如何使用舊的for循環(huán)來(lái)完成它:

          現(xiàn)在,我們將看到如何使用列表理解簡(jiǎn)潔地執(zhí)行此操作:

          看到區(qū)別了嗎?列表解析對(duì)于任何數(shù)據(jù)科學(xué)家來(lái)說(shuō)都是一項(xiàng)有用的語(yǔ)法,因?yàn)槟憧梢钥吹胶途帉懞?jiǎn)明易讀的代碼!

          堆棧和隊(duì)列

          列表是Python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu)。但我們可以使用它來(lái)創(chuàng)建用戶定義的數(shù)據(jù)結(jié)構(gòu)。使用列表構(gòu)建的兩種非常流行的用戶定義數(shù)據(jù)結(jié)構(gòu)是棧和隊(duì)列。

          棧是一個(gè)元素列表,其中元素的添加或刪除是從列表的末尾開(kāi)始的。把它想象成一堆書(shū)。當(dāng)你需要從書(shū)堆中添加或刪除一本書(shū)時(shí),你可以從頂部開(kāi)始。它使用了后進(jìn)先出的簡(jiǎn)單概念。

          另一方面,隊(duì)列是一個(gè)元素列表,其中元素的添加發(fā)生在列表的末尾,而元素的刪除則發(fā)生在列表的前面。你可以把它想象成現(xiàn)實(shí)世界中的一個(gè)隊(duì)列。當(dāng)前面的人離開(kāi)隊(duì)列時(shí),隊(duì)列變短。當(dāng)有新成員從末尾添加到隊(duì)列中時(shí),隊(duì)列將變長(zhǎng)。它使用先進(jìn)先出的概念。

          現(xiàn)在,作為一個(gè)數(shù)據(jù)科學(xué)家或分析師,你可能不是每天都在使用這個(gè)概念,但是當(dāng)你必須構(gòu)建自己的算法時(shí),它肯定會(huì)幫助你!

          數(shù)據(jù)結(jié)構(gòu)2:Python中的元組

          元組是Python中另一種非常流行的內(nèi)置數(shù)據(jù)結(jié)構(gòu)。它們與列表非常相似,只不過(guò)有一個(gè)區(qū)別,它們是不可變的。這意味著一旦生成元組,就不能添加、刪除或編輯任何值。

          我們將進(jìn)一步探討這個(gè)問(wèn)題,但首先讓我們看看如何在Python中創(chuàng)建元組!

          在Python中創(chuàng)建元組

          元組可以通過(guò)在(括號(hào))內(nèi)寫入值來(lái)生成,每個(gè)元素用逗號(hào)分隔。但是,即使你寫了一堆沒(méi)有任何括號(hào)的值并把它們賦給一個(gè)變量,你最終還是會(huì)得到一個(gè)元組!

          好了,現(xiàn)在我們知道了如何創(chuàng)建元組,讓我們討論一下不變性。

          元組的不變性

          在Python中,任何在創(chuàng)建后不能修改的內(nèi)容都是不可變的。Python語(yǔ)言可以分解為可變和不可變的對(duì)象。

          列表、字典、集合(我們將在后面的章節(jié)中探討這些)是可變對(duì)象,這意味著它們可以在創(chuàng)建后修改。另一方面,整數(shù)、浮點(diǎn)數(shù)、布爾值、字符串甚至元組都是不可變的對(duì)象。但是,是什么使它們不可改變呢?

          Python中的所有內(nèi)容都是一個(gè)對(duì)象。所以我們可以使用內(nèi)置的**id()**方法來(lái)檢查對(duì)象的內(nèi)存位置。這被稱為對(duì)象的標(biāo)識(shí)。讓我們創(chuàng)建一個(gè)列表并確定列表及其元素的位置:

          如你所見(jiàn),列表及其元素在內(nèi)存中都有不同的位置。因?yàn)槲覀冎懒斜硎强勺兊模晕覀兛梢愿淖兤湓氐闹怠W屛覀冞@樣做,看看它如何影響:

          列表的位置沒(méi)有改變,但元素的位置改變了。這意味著為元素創(chuàng)建了一個(gè)新對(duì)象并保存在列表中。這就是可變的意思。可變對(duì)象可以在創(chuàng)建后更改其狀態(tài)或內(nèi)容,但不可變對(duì)象不能這樣做。

          但是我們可以調(diào)用元組偽不可變,因?yàn)榧词顾鼈兪遣豢勺兊模鼈円部梢园渲悼梢孕薷牡目勺儗?duì)象!

          從上面的示例中可以看到,我們能夠更改元組中包含的不可變對(duì)象list的值。

          元組賦值

          元組打包和解包是一些有用的操作,你可以執(zhí)行這些操作來(lái)將值賦給單行中另一個(gè)元組。

          當(dāng)我們制造元組時(shí),我們已經(jīng)看到了元組的打包。元組解包與打包相反。

          它對(duì)于在一行中交換值非常有用。老實(shí)說(shuō),這是讓我對(duì)Python感到興奮的第一件事,能夠用這么少的代碼做這么多事情!

          更改元組值

          雖然我說(shuō)過(guò)元組值不能更改,但實(shí)際上可以通過(guò)使用list()將其轉(zhuǎn)換為列表來(lái)對(duì)其進(jìn)行更改。完成更改后,可以再次使用tuple()將其轉(zhuǎn)換回元組。

          然而,這種更改非常昂貴,因?yàn)樗枰獜?fù)制元組。但是,當(dāng)你不希望其他人更改數(shù)據(jù)結(jié)構(gòu)的內(nèi)容時(shí),元組就派上了用場(chǎng)。

          數(shù)據(jù)結(jié)構(gòu)3:Python中的字典

          Dictionary是另一種Python數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)不可變但無(wú)序的異構(gòu)對(duì)象。這意味著當(dāng)你試圖訪問(wèn)這些元素時(shí),它們的順序可能與你插入它們的順序不完全相同。

          但是,使詞典與列表區(qū)別開(kāi)來(lái)的是元素在其中的存儲(chǔ)方式。字典中的元素是通過(guò)它們的鍵值而不是它們的索引來(lái)訪問(wèn)的,正如我們?cè)诹斜碇兴龅哪菢印K宰值浒I值對(duì),而不僅僅是單個(gè)元素。

          生成詞典

          字典是通過(guò){}括號(hào)內(nèi)寫入鍵和值生成的。每個(gè)鍵值對(duì)用逗號(hào)分隔:

          使用鍵,我們可以輕松提取關(guān)聯(lián)值:

          這些鍵是獨(dú)一無(wú)二的。但是,即使字典中有多個(gè)項(xiàng)具有相同的鍵,項(xiàng)的值為最后一個(gè)鍵關(guān)聯(lián)的值:

          字典對(duì)于快速訪問(wèn)項(xiàng)非常有用,因?yàn)榕c列表和元組不同,字典不必遍歷所有找到值的項(xiàng)。字典使用哈希提高性能。

          訪問(wèn)鍵和值

          你可以使用 「keys()」 方法從字典訪問(wèn)鍵,使用**values()「方法訪問(wèn)值。我們可以使用for循環(huán)查看它們,也可以使用」list()**將它們轉(zhuǎn)換為列表:

          我們甚至可以使用**items()**方法同時(shí)訪問(wèn)這些值,該方法返回字典中每個(gè)元素的相應(yīng)鍵值對(duì)。

          數(shù)據(jù)結(jié)構(gòu)4:Python中的集合

          有時(shí)不希望在列表或元組中多次出現(xiàn)同一個(gè)元素。在這里,你可以使用「集合」數(shù)據(jù)結(jié)構(gòu)。Set是一個(gè)無(wú)序但可變的元素集合,它只包含唯一的值。

          你將看到這些值的順序與在集合中輸入的順序不同。這是因?yàn)榧鲜菬o(wú)序的。

          從集合中添加和移除元素

          要向集合中添加值,請(qǐng)使用**add()**方法。它允許你添加除可變對(duì)象以外的任何值:

          要從集合中移除值,有兩個(gè)選項(xiàng)可供選擇:

          • 第一個(gè)是**remove()**方法,如果元素不在集合中,它會(huì)給出一個(gè)錯(cuò)誤

          • 第二個(gè)是「discard()」 方法,它刪除元素,但當(dāng)元素不在集合中時(shí)不會(huì)出錯(cuò)

          如果該值不存在,「remove()「將給出一個(gè)錯(cuò)誤,而」discard()」 則不會(huì)。

          集合操作

          使用Python集,你可以執(zhí)行兩個(gè)集之間的并集、交集和差集等操作,就像在數(shù)學(xué)中一樣。

          兩個(gè)集合的并集給出兩個(gè)集合的值。但這些值是獨(dú)一無(wú)二的。因此,如果兩個(gè)集合包含相同的值,則只返回一個(gè)副本:

          兩個(gè)集合的交集只返回兩個(gè)集合共有的值:

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

          結(jié)尾

          Python是一種漂亮的語(yǔ)言。它為你提供了許多選項(xiàng)來(lái)更有效地處理數(shù)據(jù)。學(xué)習(xí)Python中的數(shù)據(jù)結(jié)構(gòu)是你學(xué)習(xí)過(guò)程中的一個(gè)關(guān)鍵。

          原文鏈接:https://www.analyticsvidhya.com/blog/2020/06/data-structures-python/

          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 31
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  自拍偷拍一区二区三区 | 蜜桃无码久久久久 | 97人人做| 精品少妇人妻AV无码专区在线 | 日一区二区三区四区视频 |