Python中的數據結構和算法:你需要知道的一切
已發表: 2020-05-06Python中的數據結構和算法是計算機科學中兩個最基本的概念。 它們是任何程序員不可或缺的工具。 Python 中的數據結構在程序處理數據時處理內存中數據的組織和存儲。 另一方面, Python 算法指的是有助於為特定目的處理數據的詳細指令集。
或者,可以說算法在邏輯上利用不同的數據結構來解決數據分析的特定問題。 無論是現實世界的問題還是典型的與編碼相關的問題,如果您想提出準確的解決方案,了解Python 中的數據結構和算法至關重要。 在本文中,您將找到對不同Python 算法和數據結構的詳細討論。 如果您有興趣了解有關 Python 的更多信息,請查看我們的數據科學課程。
了解更多: R 中最常用的六種數據結構
目錄
Python中的數據結構是什麼?
數據結構是一種組織和存儲數據的方式; 它們解釋了數據和可以對數據執行的各種邏輯操作之間的關係。 數據結構的分類方法有很多種。 一種方法是將它們分類為原始和非原始數據類型。
原始數據類型包括整數、浮點數、字符串和布爾值,非原始數據類型是數組、列表、元組、字典、集合和文件。 其中一些非原始數據類型,例如 List、Tuples、Dictionaries 和 Sets,是 Python 內置的。 Python 中還有另一類數據結構是用戶定義的。 也就是說,用戶定義它們。 這些包括堆棧、隊列、鍊錶、樹、圖和哈希映射。
原始數據結構
這些是 Python 中包含純和簡單數據值的基本數據結構,並用作操作數據的構建塊。 讓我們談談Python中的四種原始變量類型:
- 整數 -此數據類型用於表示數字數據,即不帶小數點的正整數或負整數。 比如說,-1、3 或 6。
- Float – Float 表示“浮點實數”。 它用於表示有理數,通常包含小數點,如 2.0 或 5.77。 由於 Python 是一種動態類型的編程語言,對象存儲的數據類型是可變的,不需要顯式聲明變量的類型。
- 字符串——此數據類型表示字母、單詞或字母數字字符的集合。 它是通過在一對雙引號或單引號中包含一系列字符來創建的。 要連接兩個或多個字符串,可以對它們應用“+”操作。 重複、拼接、大寫和檢索是 Python 中的其他一些字符串操作。 示例:“藍色”、“紅色”等。
- Boolean –此數據類型在比較和條件表達式中很有用,並且可以採用值 TRUE 或 FALSE。
了解更多: Python 中的數據框
內置非原始數據結構
與原始數據結構相比,非原始數據類型不僅存儲值,而且存儲不同格式的值的集合。 讓我們看一下 Python 中的非原始數據結構:
- 列表——這是 Python 中最通用的數據結構,它被寫成一個用逗號分隔的元素列表,括在方括號內。 List 可以由異構和同類元素組成。 一些適用於列表的方法是 index()、append()、extend()、insert()、remove()、pop() 等。列表是可變的; 也就是說,它們的內容可以更改,保持身份不變。
資源
- 元組——元組類似於列表,但不可變。 此外,與列表不同,元組是在括號內聲明的,而不是在方括號內。 不變性的特點是一旦一個元素在一個元組中被定義,它就不能被刪除、重新分配或編輯。 它確保數據結構的聲明值不被操縱或覆蓋。
資源
- 字典——字典由鍵值對組成。 “key”標識一個項目,“value”存儲項目的值。 冒號將鍵與其值分開。 這些項目用逗號分隔,整個項目用大括號括起來。 雖然鍵是不可變的(數字、字符串或元組),但值可以是任何類型。
資源
- 集合——集合是唯一元素的無序集合。 像列表一樣,集合是可變的並且寫在方括號內,但沒有兩個值可以相同。 一些 Set 方法包括 count()、index()、any()、all() 等。
資源
- 列表與數組——Python 中沒有內置的數組概念。 可以在初始化數組之前使用 NumPy 包導入數組。 要了解更多關於 NumPy 的信息,可以查看我們的 python NumPy 教程。 Lists 和 Arrays 除了一個不同點之外大部分是相似的——雖然 Arrays 是僅同質元素的集合,但 Lists 包括同質項和異質項。
結帳:二叉樹的類型

Python中用戶定義的數據結構
接下來我們討論Python中的數據結構和算法是對不同用戶定義的數據結構的簡要概述:
- 堆棧——堆棧是 Python 中的線性數據結構。 在堆棧中存儲項目基於先進/後出 (FILO) 或後進/先出 (LIFO) 的原則。 在 Stacks 中,在一端添加一個新元素的同時從同一端刪除一個元素。 “push”和“pop”操作分別用於插入和刪除。 與 Stack 相關的其他函數有 empty()、size() 和 top()。 堆棧可以使用 Python 庫中的模塊和數據結構來實現 - list、collections.deque 和 queue.LifoQueue。
- 隊列——類似於堆棧,隊列是線性數據結構。 但是,項目是根據先進先出 (FIFO) 原則存儲的。 在隊列中,最近最少添加的項目首先被刪除。 與Queue相關的操作包括Enqueue(添加元素)、Dequeue(刪除元素)、Front和Rear。 與 Stacks 一樣,隊列可以使用 Python 庫中的模塊和數據結構來實現——list、collections.deque 和 queue。
- 樹——樹是 Python 中的非線性數據結構,由邊連接的節點組成。 樹的屬性是一個節點被指定為根節點,除根之外,每個其他節點都有一個關聯的父節點,每個節點可以有任意數量的子節點。 二叉樹數據結構是其元素不超過兩個孩子的結構。
- 鍊錶——通過鏈接連接在一起的一系列數據元素在 Python 中稱為鍊錶。 它也是一種線性數據結構。 鍊錶中的每個數據元素都使用指針連接到另一個數據元素。 由於 Python 庫不包含鏈接列表,因此它們是使用節點的概念來實現的。 與數組相比,鏈接列表具有動態大小的優勢,易於插入/刪除元素。
- 圖形——Python 中的圖形以圖形方式表示一組對象,其中一些對像對通過鏈接連接。 頂點表示相互連接的對象,連接頂點的鏈接稱為邊。 Python 字典數據類型可用於呈現圖形。 本質上,字典的“鍵”表示頂點,“值”表示頂點之間的連接或邊。
- HashMaps/Hash Tables——在這種類型的數據結構中,哈希函數生成數據元素的地址或索引值。 索引值用作數據值的鍵,允許更快地訪問數據。 與字典數據類型一樣,哈希表具有鍵值對,但哈希函數會生成鍵。
Python中的算法是什麼?
Python 算法是一組指令,執行這些指令以獲得給定問題的解決方案。 由於算法不是特定於語言的,它們可以用幾種編程語言來實現。 沒有標準規則指導算法的編寫。 它們依賴於資源和問題,但共享一些常見的代碼結構,例如流控制(if-else)和循環(do、while、for)。 在以下部分中,我們將簡要討論樹遍歷、排序、搜索和圖算法。
樹遍曆算法
遍歷是從根節點開始訪問樹的所有節點的過程。 一棵樹可以通過三種不同的方式遍歷:
– 中序遍歷涉及首先訪問左側的子樹,然後是根,然後是右子樹。
– 在前序遍歷中,首先訪問的是根節點,其次是左子樹,最後是右子樹。
– 在後序遍曆算法中,首先訪問左子樹,然後訪問右子樹,最後訪問根節點。
了解更多:如何創建完美的決策樹
排序算法
排序算法表示以特定格式排列數據的方法。 排序確保數據搜索被優化到高水平,並且數據以可讀的格式呈現。 讓我們看一下 Python 中五種不同類型的排序算法:
- 冒泡排序 -該算法基於比較,如果相鄰元素的順序不正確,則重複交換它們。
- 合併排序——基於分治算法,合併排序將數組分成兩半,對它們進行排序,然後組合它們。
- 插入排序——這種排序從比較和排序前兩個元素開始。 然後,將第三個元素與之前排序的兩個元素進行比較,依此類推。
- 殼排序——它是插入排序的一種形式,但在這裡,對遠處的元素進行排序。 對給定列表的大子列表進行排序,並且列表的大小逐漸減小,直到所有元素都被排序。
- 選擇排序 -該算法首先從元素列表中找到最小值並將其放入排序列表中。 然後對列表中未排序的每個剩餘元素重複該過程。 將進入排序列表的新元素與其現有元素進行比較並放置在正確的位置。 該過程繼續進行,直到所有元素都被排序。
搜索算法
搜索算法有助於從不同的數據結構中檢查和檢索元素。 一種類型的搜索算法應用順序搜索的方法,其中順序遍歷列表,並檢查每個元素(線性搜索)。 在另一種類型的區間搜索中,在排序的數據結構中搜索元素(二分搜索)。 讓我們看一些例子:
- 線性搜索——在此算法中,每個項目都按順序逐一搜索。
- 二分搜索 –搜索間隔被重複分成兩半。 如果要搜索的元素低於區間的中心分量,則區間縮小到下半部分。 否則,它會縮小到上半部分。 重複該過程,直到找到該值。
圖算法
有兩種使用邊遍歷圖的方法。 這些是:
- 深度優先遍歷 (DFS) –在該算法中,圖形以深度運動方式遍歷。 當任何迭代面臨死胡同時,堆棧用於轉到下一個頂點並開始搜索。 DFS 使用設置的數據類型在 Python 中實現。
- 廣度優先遍歷 (BFS) -在該算法中,圖以廣度運動進行遍歷。 當任何迭代面臨死胡同時,使用隊列去下一個頂點並開始搜索。 BFS 是在 Python 中使用隊列數據結構實現的。
算法分析
- 先驗分析——這代表了算法在實施之前的理論分析。 通過假設諸如處理器速度等因素是恆定的並且對算法沒有影響來衡量算法的效率。
- 後驗分析——這是指算法實施後的經驗分析。 編程語言用於實現所選算法,然後在計算機上執行。 此分析收集統計信息,例如算法運行所需的時間和空間。
結論
無論你是編程老手還是新手,都不能忽視Python 中的數據結構和算法。 當您對數據執行操作時,這些概念至關重要,您需要優化數據處理。 雖然數據結構有助於組織信息,但算法提供了解決數據分析問題的指導方針。 它們共同為計算機科學家提供了一種處理作為輸入數據給出的信息的方法。
如果您想了解數據科學,請查看 IIIT-B 和 upGrad 的數據科學執行 PG 計劃,該計劃是為在職專業人士創建的,提供 10 多個案例研究和項目、實用的實踐研討會、行業專家的指導、1與行業導師一對一,400 多個小時的學習和頂級公司的工作協助。
學習數據結構和算法需要多少天?
談到計算機科學,數據結構和算法被認為是所有主題中最難的。 但是,對於每個程序員來說,學習它們真的很重要。 如果您每天花費大約 3-4 小時,那麼您將需要至少 6 到 8 週的時間來學習數據結構和算法。
這裡沒有嚴格的時間表,因為它完全取決於你的速度和學習能力。 如果你擅長掌握基礎知識,那麼你會發現很容易理解數據結構和算法的深入概念。
算法有哪些不同類型?
算法是解決任何問題都必須遵循的逐步過程。 不同的問題需要不同的算法來解決問題。 每個程序員都會根據算法的要求和速度來選擇解決特定問題的算法。
儘管如此,程序員通常會考慮使用某些頂級算法來解決不同的問題。 一些著名的算法是蠻力算法、貪婪算法、隨機算法、動態規划算法、遞歸算法、分治算法和回溯算法。
Python的主要用途是什麼?
Python 是一種通用編程語言,用於執行不同的活動。 Python 最好的一點是它不綁定到任何特定的應用程序,您可以根據需要使用它。 由於庫的可用性、多功能性和易於理解的結構,它被認為是開發人員中最常用的編程語言之一。
Python主要用於網站和軟件的開發。 除此之外,它還用於任務自動化、數據可視化和數據分析。 Python 很容易學習,這就是為什麼即使是非程序員也採用這種語言來組織財務和執行其他日常任務的原因。