偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

盤點(diǎn) Python 10 大常用數(shù)據(jù)結(jié)構(gòu)(上篇)

開發(fā) 后端
如果你還處于Python入門階段,通常只需掌握l(shuí)ist、tuple、set、dict這類數(shù)據(jù)結(jié)構(gòu),做到靈活使用即可。這個(gè)專題,盡量使用最精簡(jiǎn)的文字,借助典型案例盤點(diǎn)Python常用的數(shù)據(jù)結(jié)構(gòu)。

Python 常用數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)目的

這個(gè)專題,盡量使用最精簡(jiǎn)的文字,借助典型案例盤點(diǎn)Python常用的數(shù)據(jù)結(jié)構(gòu)。

如果你還處于Python入門階段,通常只需掌握l(shuí)ist、tuple、set、dict這類數(shù)據(jù)結(jié)構(gòu),做到靈活使用即可。

然而,隨著學(xué)習(xí)的深入,平時(shí)遇到實(shí)際場(chǎng)景變復(fù)雜,很有必要去了解Python內(nèi)置的更加強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)deque、heapq、Counter、OrderedDict、defaultDict、ChainMap,掌握它們,往往能讓你少寫一些代碼且能更加高效的實(shí)現(xiàn)功能。

 

我的施工之路

學(xué)習(xí)目標(biāo)

  • 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)第一階段:掌握它們的基本用法,使用它們解決一些基本問(wèn)題;
  • 學(xué)習(xí)第二階段:知道何種場(chǎng)景選用哪種最恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),去解決題問(wèn)題;
  • 學(xué)習(xí)第三階段:了解內(nèi)置數(shù)據(jù)結(jié)構(gòu)的背后源碼實(shí)現(xiàn),與《算法和數(shù)據(jù)結(jié)構(gòu)》這門學(xué)問(wèn)里的知識(shí)聯(lián)系起來(lái),打通任督二脈。

下面根據(jù)定義的這三個(gè)階段,總結(jié)以下10種最常用的數(shù)據(jù)結(jié)構(gòu):

1. list

基本用法 廢話不多說(shuō),在前面單獨(dú)有一個(gè)專題詳述了list的使用列表專題

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

實(shí)現(xiàn)原理 list對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)的線性表,列表長(zhǎng)度在初始狀態(tài)時(shí)無(wú)需指定,當(dāng)插入元素超過(guò)初始長(zhǎng)度后再啟動(dòng)動(dòng)態(tài)擴(kuò)容,刪除時(shí)尤其位于列表開始處元素,時(shí)間復(fù)雜度為O(n)

2. tuple

元組是一類不允許添加刪除元素的特殊列表,也就是一旦創(chuàng)建后續(xù)決不允許增加、刪除、修改。

基本用法 元組大量使用在打包和解包處,如函數(shù)有多個(gè)返回值時(shí)打包為一個(gè)元組,賦值到等號(hào)左側(cè)變量時(shí)解包。

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

實(shí)際創(chuàng)建一個(gè)元組實(shí)例

使用場(chǎng)景 如果非常確定你的對(duì)象后面不會(huì)被修改,則可以大膽使用元組。為什么?因?yàn)橄啾扔趌ist, tuple實(shí)例更加節(jié)省內(nèi)存,這點(diǎn)尤其重要。

  1. In [24]: from sys import getsizeof                                               
  2.  
  3. In [25]: getsizeof(list())                                                       
  4. Out[25]: 72 # 一個(gè)list實(shí)例占用72個(gè)字節(jié) 
  5.  
  6. In [26]: getsizeof(tuple())                                                      
  7. Out[26]: 56 # 一個(gè)tuple實(shí)例占用56個(gè)字節(jié) 

所以創(chuàng)建100個(gè)實(shí)例,tuple能節(jié)省1K多字節(jié)。

3. set

基本用法 set是一種里面不能含有重復(fù)元素的數(shù)據(jù)結(jié)構(gòu),這種特性天然的使用于列表的去重。

  1. In [27]: a=[3,2,5,2,5,3]                                                         
  2.  
  3. In [28]: set(a)                                                                  
  4. Out[28]: {2, 3, 5} 

除此之外,還有知道set結(jié)構(gòu)可用于兩個(gè)set實(shí)例的求交集、并集、差集等操作。

  1. In [29]: a = {2,3,5}                                                             
  2.  
  3. In [30]: b = {3,4,6,2}                                                           
  4.  
  5. In [31]: a.intersection(b) # 求交集                                                       
  6. Out[31]: {2, 3} 

使用場(chǎng)景 如果只是想緩存某些元素值,且要求元素值不能重復(fù)時(shí),適合選用此結(jié)構(gòu)。并且set內(nèi)允許增刪元素,且效率很高。

實(shí)現(xiàn)原理 set在內(nèi)部將值哈希為索引,然后按照索引去獲取數(shù)據(jù),因此刪除、增加、查詢?cè)匦Ч己芨摺?/p>

4. dict

基本用法 dict 是Python中使用最頻繁的數(shù)據(jù)結(jié)構(gòu)之一,字典創(chuàng)建由通過(guò)dict函數(shù)、{}寫法、字典生成式等,增刪查元素效率都很高。

  1. d = {'a':1,'b':2} # {}創(chuàng)建字典 
  2.  
  3. # 列表生成式 
  4. In [38]: d = {a:b for a,b in zip(['a','b'],[1,2])}                               
  5. In [39]: d                                                                       
  6. Out[39]: {'a': 1, 'b': 2} 

使用場(chǎng)景 字典尤其適合在查詢多的場(chǎng)景,時(shí)間復(fù)雜度為O(1). 如leetcode第一題求解兩數(shù)之和時(shí),就會(huì)使用到dict的O(1)查詢時(shí)間復(fù)雜度。

同時(shí),Python類中屬性值等信息也都是緩存在__dict__這個(gè)字典型數(shù)據(jù)結(jié)構(gòu)中。

但是值得注意,dict占用字節(jié)數(shù)是list、tuple的3、4倍,因此對(duì)內(nèi)存要求苛刻的場(chǎng)景要慎重考慮。

  1. In [40]: getsizeof(dict())                                                       
  2. Out[40]: 248 

實(shí)現(xiàn)原理 字典是一種哈希表,同時(shí)保存了鍵值對(duì)。

以上4種數(shù)據(jù)結(jié)構(gòu)相信大家都已經(jīng)比較熟悉,因此我言簡(jiǎn)意賅的介紹一遍。接下來(lái)再詳細(xì)的介紹下面6種數(shù)據(jù)結(jié)構(gòu)及各自使用場(chǎng)景,會(huì)列舉更多的例子。

  • 5.  deque
  • 6.  Counter
  • 7.  OrderedDict
  • 8. heapq
  • 9. defaultdict
  • 10. ChainMap

 

責(zé)任編輯:趙寧寧 來(lái)源: Python與算法社區(qū)
相關(guān)推薦

2020-08-02 23:13:29

python開發(fā)數(shù)據(jù)結(jié)構(gòu)

2012-04-28 14:21:47

Java數(shù)據(jù)結(jié)構(gòu)線性結(jié)構(gòu)

2011-03-30 09:07:46

數(shù)據(jù)庫(kù)

2021-04-12 10:02:02

JavaList集合

2011-05-23 17:11:54

云端數(shù)據(jù)遷移

2014-07-01 15:49:33

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

2025-04-07 08:21:49

2023-04-27 09:13:20

排序算法數(shù)據(jù)結(jié)構(gòu)

2019-04-14 22:22:28

Python數(shù)據(jù)結(jié)構(gòu)算法

2021-07-16 07:57:34

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

2017-03-15 14:20:46

2019-09-18 08:31:47

數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

2021-07-13 07:52:03

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

2021-07-15 06:43:12

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

2017-03-01 13:58:46

Python數(shù)據(jù)結(jié)構(gòu)鏈表

2023-09-21 16:13:20

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

2023-10-31 08:51:25

數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)

2017-08-03 11:11:05

2018-08-02 14:56:19

2011-03-31 15:41:51

Cacti數(shù)據(jù)表結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)