<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

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

    共 3052字,需瀏覽 7分鐘

     ·

    2020-08-12 05:57

    我的施工之路

    上圖施工計(jì)劃,已完成專題:

    1我的施工計(jì)劃

    2數(shù)字專題

    3字符串專題

    4列表專題

    5流程控制專題

    6編程風(fēng)格專題

    7函數(shù)使用

    8.面向?qū)ο缶幊?上篇)

    9.面向?qū)ο缶幊?下篇)

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

    學(xué)習(xí)目的

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

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

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

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

    學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)第一階段:掌握它們的基本用法,使用它們解決一些基本問題;

    學(xué)習(xí)第二階段:知道何種場景選用哪種最恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),去解決題問題;

    學(xué)習(xí)第三階段:了解內(nèi)置數(shù)據(jù)結(jié)構(gòu)的背后源碼實(shí)現(xiàn),與《算法和數(shù)據(jù)結(jié)構(gòu)》這門學(xué)問里的知識聯(lián)系起來,打通任督二脈。

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

    1 list

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

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

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

    2 tuple

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

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

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

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

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

    In?[24]:?from?sys?import?getsizeof??????????????????????????????????????????????

    In?[25]:?getsizeof(list())??????????????????????????????????????????????????????
    Out[25]:?72?#?一個list實(shí)例占用72個字節(jié)

    In?[26]:?getsizeof(tuple())?????????????????????????????????????????????????????
    Out[26]:?56?#?一個tuple實(shí)例占用56個字節(jié)

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

    3 set

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

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

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

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

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

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

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

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

    實(shí)現(xiàn)原理 set在內(nèi)部將值哈希為索引,然后按照索引去獲取數(shù)據(jù),因此刪除、增加、查詢元素效果都很高。

    4 dict

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

    d?=?{'a':1,'b':2}?#?{}創(chuàng)建字典

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

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

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

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

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

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

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

    5 deque

    6 Counter

    7 OrderedDict

    8 heapq

    9 defaultdict

    10 ChainMap

    雖然每天下班回來很累了,我依然要求自己盡量別到處轉(zhuǎn)載、到處去網(wǎng)上找熱點(diǎn)。

    為什么呢?

    一是近三年來養(yǎng)成的總結(jié)習(xí)慣依然驅(qū)動我去多寫原創(chuàng);

    二來個人認(rèn)為:原創(chuàng)代表一種態(tài)度、一種真誠,一種對初心的堅(jiān)守。

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


    往期精彩回顧





    獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:

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

    本站qq群1003271085。

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

    瀏覽 33
    點(diǎn)贊
    評論
    收藏
    分享

    手機(jī)掃一掃分享

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

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    一级黄片学生妹 | 丁香婷婷五月天影院 | 日韩A片免费在线观看 | 91豆花成人网站 | 诱咪一区二区三区四区 |