8. Python3 中的數(shù)據(jù)結構

Python更多的數(shù)據(jù)結構

  • 集合(set)
  • 堆(heap)
  • 雙向隊列(double-ended queue)

在Python內(nèi)置的數(shù)據(jù)類型中,tuple音诫,string雪位,list,dict這四種傳統(tǒng)的數(shù)據(jù)類型基本上夠用了香罐,可還是不夠靈活高效时肿◇Τ桑可變數(shù)據(jù)類型只有l(wèi)ist和dict兩種寸宏,dict的鍵值對應的表達也太死板击吱,所以在list的基礎上衍生出來了set覆醇、heap永脓、deque等高級丟丟的數(shù)據(jù)結構(當然功能也更加細化)。


8.1. 集合 set

沒有重復元素搅吁,不能使用索引訪問的數(shù)據(jù)結構哦,支持集合操作(交intersection谎懦、并union肚豺、差difference界拦、對稱差symmetric_difference)。不恰當?shù)谋扔飨淼椋暇褪且粋€大罐子截碴。

  1. 與list的關系蛉威。set(lst)將列表轉(zhuǎn)換成set日丹;list(st)將set轉(zhuǎn)換成list對象。
  2. 元素的加入:add(st蚯嫌,value)
  3. 元素的刪除(remove哲虾,指定元素)和彈出(pop齐帚,最小元素)

8.2 堆 heap

python中的堆 是一種按照某種順序排列的數(shù)據(jù)結構(比喻為水桶对妄,最輕的水果飄在最上面)敢朱。加入一個元素后自動排序孝常,剔除一個元素也自動排序。加入值相當與lst.append().sort()构灸,讀取值相當與lst[0] . 簡單的說喜颁,heap= list+sort

  1. 與list的關系。heap就是一種特殊排序的list(heap是基于樹的排序)曹阔,可通過heapify(lst)強制將list轉(zhuǎn)換成heap(注意半开,未排序,只是可以用后面的heapq模塊中的函數(shù)操作了)
  2. 由于不存在heap數(shù)據(jù)結構的對象赃份,所以正常的堆(heap)的操作都需要將heap作為參數(shù)傳入函數(shù)(list的所有操作寂拆,堆heap均可用奢米,只是會破壞其排序結構)。
>>> from heapq import *
>>> from _heapq import heappop
>>> heap =[] # an empty list, is also a heap
>>> for i in range(10):
...     heappush(heap,10-i) #  push a value
... 
>>> print(heap)
[1, 2, 5, 4, 3, 9, 6, 10, 7, 8]
>>> heappop(heap)          # pop the minimal value
1
>>> print(heap)
[2, 3, 5, 4, 8, 9, 6, 10, 7]
>>> heapreplace(heap,6.5) # pop at first, and push another value
2
>>> print(heap)
[3, 4, 5, 6.5, 8, 9, 6, 10, 7]
>>> type(heap) # heap is a list in the implementation
<class 'list'>
  1. 更多操作纠永,最大(小)的n個值
>>> heap
[3, 4, 5, 6.5, 8, 9, 6, 10, 7]
>>> nlargest(3,heap) # 返回最大的多個值
[10, 9, 8]
>>> nsmallest(2,heap)# 返回最小的n個值
[3, 4]
>>> heap                    # 不是 inplace操作鬓长,heap沒變
[3, 4, 5, 6.5, 8, 9, 6, 10, 7]

8.3 雙端隊列(double-ended queue)

我理解為管道操作,可以兩邊塞渺蒿,也可以兩邊掏痢士。像list一樣從中間取一個值,當然可以(如果你非常想要這么做茂装,這不是queue的主要職責)怠蹂!

>>> from collections import deque
>>> q = deque(list(range(6)))
>>> print(q)
deque([0, 1, 2, 3, 4, 5])
>>> q.append('x') 
>>> q.appendleft('-1')
>>> print(q)
deque(['-1', 0, 1, 2, 3, 4, 5, 'x'])
>>> print(q.pop())
x
>>> print(q.popleft())
-1
>>> print(q)
deque([0, 1, 2, 3, 4, 5])
>>> q.rotate(3)
>>> print(q)
deque([3, 4, 5, 0, 1, 2])
>>> q.rotate(-1)
>>> print(q)
deque([4, 5, 0, 1, 2, 3])
>>> type(q)
<class 'collections.deque'>
>>> q[2] = 10
>>> print(q)
deque([4, 5, 10, 1, 2, 3])

小節(jié)

  • 針對list的各種不足,提出了set少态,heap城侧,deque三種新的數(shù)據(jù)結構。
  • set能夠有效剔除重復數(shù)據(jù)彼妻,同是提供了一套的集合的邏輯操作運算(用的很多嫌佑,但是自己用list實現(xiàn)是很麻煩的事情)。
  • heap 在與動態(tài)更新list數(shù)據(jù)的時候能夠很快的給出排序結果侨歉,也就是在push的時候數(shù)據(jù)的放置位置是按照大小判定的屋摇。
  • deque 內(nèi)在實現(xiàn)就是list,除了操作的便捷性以外(這就夠了幽邓,不然純c的天下何須python)炮温,我沒有發(fā)現(xiàn)特別的優(yōu)勢。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牵舵,一起剝皮案震驚了整個濱河市柒啤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畸颅,老刑警劉巖担巩,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異没炒,居然都是意外死亡涛癌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門送火,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拳话,“玉大人,你說我怎么就攤上這事漾脂〖倨模” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵骨稿,是天一觀的道長笨鸡。 經(jīng)常有香客問我姜钳,道長,這世上最難降的妖魔是什么形耗? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任哥桥,我火速辦了婚禮,結果婚禮上激涤,老公的妹妹穿的比我還像新娘拟糕。我一直安慰自己,他們只是感情好倦踢,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布送滞。 她就那樣靜靜地躺著,像睡著了一般辱挥。 火紅的嫁衣襯著肌膚如雪犁嗅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天晤碘,我揣著相機與錄音褂微,去河邊找鬼。 笑死园爷,一個胖子當著我的面吹牛宠蚂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播童社,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼求厕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叠洗?” 一聲冷哼從身側(cè)響起甘改,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旅东,失蹤者是張志新(化名)和其女友劉穎灭抑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抵代,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡腾节,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荤牍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片案腺。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖康吵,靈堂內(nèi)的尸體忽然破棺而出劈榨,到底是詐尸還是另有隱情,我是刑警寧澤晦嵌,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布同辣,位于F島的核電站拷姿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏旱函。R本人自食惡果不足惜响巢,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棒妨。 院中可真熱鬧踪古,春花似錦、人聲如沸券腔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纷纫。三九已至蜈出,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涛酗,已是汗流浹背铡原。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留商叹,地道東北人燕刻。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像剖笙,于是被迫代替她去往敵國和親卵洗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法弥咪,類相關的語法过蹂,內(nèi)部類的語法,繼承相關的語法聚至,異常的語法酷勺,線程的語...
    子非魚_t_閱讀 31,661評論 18 399
  • 教你如何迅速秒殺掉:99%的海量數(shù)據(jù)處理面試題 本文經(jīng)過大量細致的優(yōu)化后,收錄于我的新書《編程之法》第六章中扳躬,新書...
    Helen_Cat閱讀 7,428評論 1 39
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,004評論 6 13
  • 娉婷小苑中脆诉,婀娜曲池東。 朝佩皆垂地贷币,仙衣盡帶風击胜。 七賢寧占竹,三品且饒松役纹。 腸斷靈和殿偶摔,先皇玉座空。 假如我是棵...
    掬楓閱讀 261評論 5 2
  • 文/梁山 人常說:“世界上有三種人最親人促脉,第一辰斋,媽媽信不。第二,姐姐亡呵。第三抽活,姑姑∶淌玻”確實如此下硕,在我的五十多年的生活...
    長城腳下人家福遇緣閱讀 1,076評論 0 1