【Python基礎】盤點 Python 10 大常用數據結構(上篇)

2021-02-19 機器學習初學者
Python 常用數據結構學習目的

這個專題,儘量使用最精簡的文字,藉助典型案例盤點Python常用的數據結構。

如果你還處於Python入門階段,通常只需掌握list、tuple、set、dict這類數據結構,做到靈活使用即可。

然而,隨著學習的深入,平時遇到實際場景變複雜,很有必要去了解Python內置的更加強大的數據結構deque、heapq、Counter、OrderedDict、defaultDict、ChainMap,掌握它們,往往能讓你少寫一些代碼且能更加高效的實現功能。

學習目標

學習數據結構第一階段:掌握它們的基本用法,使用它們解決一些基本問題;

學習第二階段:知道何種場景選用哪種最恰當的數據結構,去解決題問題;

學習第三階段:了解內置數據結構的背後源碼實現,與《算法和數據結構》這門學問裡的知識聯繫起來,打通任督二脈。

下面根據定義的這三個階段,總結以下10種最常用的數據結構:

1 list

基本用法 廢話不多說,在前面單獨有一個專題詳述了list的使用列表專題

使用場景 list 使用在需要查詢、修改的場景,極不擅長需要頻繁插入、刪除元素的場景。

實現原理 list對應數據結構的線性表,列表長度在初始狀態時無需指定,當插入元素超過初始長度後再啟動動態擴容,刪除時尤其位於列表開始處元素,時間複雜度為O(n)

2 tuple

元組是一類不允許添加刪除元素的特殊列表,也就是一旦創建後續決不允許增加、刪除、修改。

基本用法 元組大量使用在打包和解包處,如函數有多個返回值時打包為一個元組,賦值到等號左側變量時解包。

In [22]: t=1,2,3                                         
In [23]: type(t)                              
Out[23]: tuple

實際創建一個元組實例

使用場景 如果非常確定你的對象後面不會被修改,則可以大膽使用元組。為什麼?因為相比於list, tuple實例更加節省內存,這點尤其重要。

In [24]: from sys import getsizeof                                              

In [25]: getsizeof(list())                                                      
Out[25]: 72 # 一個list實例佔用72個字節

In [26]: getsizeof(tuple())                                                     
Out[26]: 56 # 一個tuple實例佔用56個字節

所以創建100個實例,tuple能節省1K多字節。

3 set

基本用法 set是一種裡面不能含有重複元素的數據結構,這種特性天然的使用於列表的去重。

In [27]: a=[3,2,5,2,5,3]                                                        

In [28]: set(a)                                                                 
Out[28]: {2, 3, 5}

除此之外,還有知道set結構可用於兩個set實例的求交集、併集、差集等操作。

In [29]: a = {2,3,5}                                                            

In [30]: b = {3,4,6,2}                                                          

In [31]: a.intersection(b) # 求交集                                                      
Out[31]: {2, 3}

使用場景 如果只是想緩存某些元素值,且要求元素值不能重複時,適合選用此結構。並且set內允許增刪元素,且效率很高。

實現原理 set在內部將值哈希為索引,然後按照索引去獲取數據,因此刪除、增加、查詢元素效果都很高。

4 dict

基本用法 dict 是Python中使用最頻繁的數據結構之一,字典創建由通過dict函數、{}寫法、字典生成式等,增刪查元素效率都很高。

d = {'a':1,'b':2} # {}創建字典

# 列表生成式
In [38]: d = {a:b for a,b in zip(['a','b'],[1,2])}                              
In [39]: d                                                                      
Out[39]: {'a': 1, 'b': 2}

使用場景 字典尤其適合在查詢多的場景,時間複雜度為O(1). 如leetcode第一題求解兩數之和時,就會使用到dict的O(1)查詢時間複雜度。

同時,Python類中屬性值等信息也都是緩存在__dict__這個字典型數據結構中。

但是值得注意,dict佔用字節數是list、tuple的3、4倍,因此對內存要求苛刻的場景要慎重考慮。

In [40]: getsizeof(dict())                                                      
Out[40]: 248

實現原理 字典是一種哈希表,同時保存了鍵值對。

以上4種數據結構相信大家都已經比較熟悉,因此我言簡意賅的介紹一遍。接下來再詳細的介紹下面6種數據結構及各自使用場景,會列舉更多的例子。

5 deque6 Counter7 OrderedDict8 heapq9 defaultdict10 ChainMap

雖然每天下班回來很累了,我依然要求自己儘量別到處轉載、到處去網上找熱點。

為什麼呢?

一是近三年來養成的總結習慣依然驅動我去多寫原創;

二來個人認為:原創代表一種態度、一種真誠,一種對初心的堅守。

當然最後也是最重要的,還有大家的期待和等候,如果你們再多多支持原創,整個三連就更好了,這是對我的一個最積極的反饋。

獲取一折本站知識星球優惠券,複製連結直接打開:

https://t.zsxq.com/662nyZF

本站qq群1003271085。

加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):

相關焦點

  • 【Python基礎】盤點 Python 10 大常用數據結構(下篇)
    學習目的這個專題,儘量使用最精簡的文字,藉助典型案例盤點Python常用的數據結構。如果你還處於Python入門階段,通常只需掌握list、tuple、set、dict這類數據結構,做到靈活使用即可。學習目標學習數據結構第一階段:掌握它們的基本用法,使用它們解決一些基本問題;學習第二階段:知道何種場景選用哪種最恰當的數據結構,去解決題問題;學習第三階段:了解內置數據結構的背後源碼實現,與《算法和數據結構》這門學問裡的知識聯繫起來
  • Python基礎學習—數據結構:列表
    前面我們學習了pyth
  • 一日一技:python中4大數據結構常用接口簡介
    具體到python中數據結構的選擇運用,雖然有很多類型可供選擇:除了基本的列表、字典、集合和元組4個基本類型外,collections模塊中提供了很多定製化的數據結構,還有專用的堆heapq和枚舉enum等。誠然,特定數據結構在某些應用場景下可能有神奇的效果,但把基礎數據類型用到極致也可堪稱是絕招。
  • Python基礎學習之常用六大數據類型
    python中的int是邊長的,也就是說可以存儲無限大的整數,但是這是不現實的,因為沒有這麼多的內存夠分配。整型不僅支持十進位,還支持二進位、八進位、十六進位。a = 1b = 1.1print(type(a+b)) #<class 'float'>三、字符串字符串在任何程式語言中都是最常用的數據類型。字符串的創建很簡單,也是上面所說的三步,但是要加上單引號或者雙引號。
  • python數據分析專題 (7):python數據分析模塊
    numpy官網:https://www.scipy.org/NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。
  • python語法基礎
    在這裡推薦幾本基礎的,適合新手查看的入門書籍python簡明教程https://bop.mol.uno/think pythonhttps://cycleuser.gitbooks.io/think-python/content/廖雪峰的python教程https://www.liaoxuefeng.com/wiki/1016959663602400
  • python數據分析專題 (9):numpy基礎
    NumPy(Numerical Python的簡稱)是高性能科學計算和數據分析的基礎包。NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。
  • 小白學 Python(12):基礎數據結構(字典)(上)
    人生苦短,我選Python前文傳送門小白學 Python(1):開篇小白學 Python(2):基礎數據類型(上)小白學 Python(3):基礎數據類型(下)小白學 Python(4):變量基礎操作小白學 Python(5):基礎運算符(上)小白學 Python(6):基礎運算符(下)小白學 Python(7):基礎流程控制(上)小白學 Python(8):基礎流程控制(下)小白學 Python(9):基礎數據結構(列表)(上)小白學 Python(10):
  • Simple is better than complex——python中4大數據結構常用接口簡介
    具體到python中數據結構的選擇運用,雖然有很多類型可供選擇:除了基本的列表、字典、集合和元組4個基本類型外,collections模塊中提供了很多定製化的數據結構,還有專用的堆heapq和枚舉enum等。誠然,特定數據結構在某些應用場景下可能有神奇的效果,但把基礎數據類型用到極致也可堪稱是絕招。
  • python基礎知識變量、運算和數據類型
    = id(y)時 → False 知識點4:Python 基礎數據結構數據結構:包含多個數據的數據集,不同類型數據集對應不同的數據排列方式。數據集中的數據既可以是單個基礎數據(數字和字符串),也可以是不同類型的數據集。對於一門程式語言來說,數據結構就是其根基,了解掌握數據結構對於學好這門語言至關重要。
  • 盤點 Python 10 大常用數據結構(下篇)
    學習目的這個專題,儘量使用最精簡的文字,藉助典型案例盤點Python常用的數據結構。如果你還處於Python入門階段,通常只需掌握list、tuple、set、dict這類數據結構,做到靈活使用即可。學習目標學習數據結構第一階段:掌握它們的基本用法,使用它們解決一些基本問題;學習第二階段:知道何種場景選用哪種最恰當的數據結構,去解決題問題;學習第三階段:了解內置數據結構的背後源碼實現,與《算法和數據結構》這門學問裡的知識聯繫起來
  • Python零基礎入門-03-Python基礎語法
    Python零基礎入門-03-Python基礎語法本節課的知識點:1,python系列教程的學習方法。2,熟悉Python的基礎語法內容。1,python系列課程學習方法由於python屬於腳本語言,如果單純的解釋語法沒有什麼實在的意義,所以我python系列的課程都是以視頻講解為主,至於這裡的文章,是給你複習用的。2. 基礎語法python的基礎語法都將以小例子作為驅動來講解。如果你有其他程式語言的基礎,那麼直接看文章就會很快上手。
  • 了解這些python數據結構,你也可以進BAT
    了解了數據結構,你就能把python代碼寫的如絲般順滑。  現如今在很多大廠面試中,面試官都會著重考察候選人對數據結構的認識程度和應用水平,為什麼呢?因為在實際工作過程中,數據結構就像代碼的地基一樣,地基不牢地動山搖。只有充分理解數據機構,才能在工作中應用的得心應手。Python中有哪些數據結構呢?
  • 學好Python,必須熟練掌握的幾種數據結構【文末送書】
    實際上,其意在闡明編程的核心在於掌握數據結構與算法!如果把一名優秀的程式設計師比作武林高手,那麼數據結構即為招式,算法則是內功,二者缺一不可。當下,Python語言非常火熱,學好Python就必須掌握好這些數據結構的常用用法。
  • Python數據類型串講(上)
    CDA數據分析師 出品1、什麼是數據學習一門新的程式語言,掌握其語法的底層是我們第一步要做的事。編程的底層也就是我們常說的基礎,下面將從python的基礎中的數據類型開始入門。何為數據?像我們日常生活中的事物,可以分為固態、液態、氣態等,python語言中的數據也有其對應的「狀態」,且要求更加嚴格,不同的狀態用不同類型的數據去表示,不允許存在語法歧義。數據結構的意義:將上述五大數據類型整合到一起。但是摻到一起不是目的。目的是能夠組合成一個好的結構,方便自己或者他人進行數據存儲或者讀取。
  • python數據分析常用庫
    python被稱作膠水語言原因是具有非常非常多的庫可以使用。其中做數據分析時那些庫常用,怎麼用是本篇文字討論的內容。官方的網址:https://pandas.pydata.org/Pandas包含:1、DataFrame(二維表)數據結構2、Series(一維數組)數據結構3、對數據的操作工具和方法如果是用Anaconda的話,默認已經包含Pandas,不需要另外安裝DataFrame讀取CSV構建對象,只需一行代碼df = pd.DataFrame(pd.read_csv
  • java大數據和python大數據的全面對比,哪個更主流?
    大數據是目前網際網路流行的技術語言,處理大數據的程式語言比較有優勢的也很多,比如java、python、go、R語言、Hadoop等等,按道理來說每種程式語言都可以處理大數據,只是處理的規模不一樣而且,但是現在比較受歡迎的數據處理程式語言是java與python。
  • 二、Python基礎數據類型、變量、常量
    二、Python基礎數據類型、變量、常量1.變量:把程序運行的中間結果臨時的存在內存中,以便後續的代碼調用變量不僅可以是數組,還可以是任意數據類型。在程序中,變量就是用一個變量名表示,變量名必須是大小寫英文、數字、和『_』下劃線組合,並且不能以數字開頭。
  • python數據處理 | 氣象數據的常用格式以及處理方法
    這次我們來簡單了解下氣象數據常用的格式以及處理的工具,常用的數據格式包括普通的二進位格式、文本數據、NetCDF、HDF4/5以及GRIB1/2數據。我們可以利用程式語言例如python、matlab以及c語言,根據數據的說明文檔或者相應的數據api開發文檔進行讀取,此外我們也可以根據提供的command命令行進行高效提取數據。
  • python數據分析常用庫之pandas入門(2)
    索引、選擇和賦值昨天介紹了pandas的模塊引入、創建和讀取數據,今天主要看看怎麼從數據結構中獲得想要的值,也就是數據的索引查找、