python的dict 和set

一抓督、dict
dict是python內(nèi)置的字典膳犹,使用key-val存儲(chǔ),在其他語(yǔ)言中 也叫map,具有極快的查找速度蜂林,不會(huì)隨著數(shù)據(jù)量的變大而變慢(list就會(huì)隨著長(zhǎng)度變長(zhǎng)遥诉,耗時(shí)變長(zhǎng))
先看看dict的使用
1、用法
>>> d = {'李雙雙':'女','張cc':'男'}
>>> d
>>> {'張cc': '男', '李雙雙': '女'}
2噪叙、看了dict,那為什么dict的速度會(huì)那么快呢矮锈?

1)dict的底層實(shí)現(xiàn)
dict的底層實(shí)現(xiàn)是哈希表(hash tables),通過關(guān)鍵值對(duì)(key-val) 而直接進(jìn)行訪問數(shù)據(jù)。它通過把 key 和value 映射到表中的一個(gè)位置來(lái)進(jìn)行訪問睁蕾,這種結(jié)構(gòu)查詢快苞笨,更新也非痴洌快。在對(duì)key進(jìn)行 hash的時(shí)候瀑凝,如果遇到相同的hash值序芦,也就是哈希沖突,如何解決呢粤咪?一般的做法有兩種谚中,一種是鏈接法,一種是開發(fā)尋址法寥枝。python選擇后者宪塔。
開放尋址法:所有的元素都存放在散列表里,當(dāng)產(chǎn)生哈希沖突時(shí)囊拜,通過一個(gè)探測(cè)函數(shù)計(jì)算出下一個(gè)候選位置蝌麸,如果下一個(gè)獲選位置還是有沖突,那么不斷通過探測(cè)函數(shù)往下找艾疟,直到找個(gè)一個(gè)空槽來(lái)存放待插入元素
2)list的底層實(shí)現(xiàn)
假設(shè)字典包含了1萬(wàn)個(gè)漢字来吩,
我們要查某一個(gè)字,一個(gè)辦法是把字典從第一頁(yè)往后翻蔽莱,直到找到我
們想要的字為止弟疆,這種方法就是在list中查找元素的方法,list越大盗冷,查
找越慢怠苔。

第二種方法是先在字典的索引表里(比如部首表)查這個(gè)字對(duì)應(yīng)的頁(yè)
碼,然后直接翻到該頁(yè)仪糖,找到這個(gè)字柑司。無(wú)論找哪個(gè)字,這種查找速度
都非彻埃快攒驰,不會(huì)隨著字典大小的增加而變慢。
dict就是第二種實(shí)現(xiàn)方式
3故爵、訪問元素
>>> d['李雙雙']
>>> 女
4玻粪、增加元素
>>> d['王某某'] = '女'
>>> d
>>> {'張cc': '男', '李雙雙': '女', '王某某': '女'}
5、修改元素
>> d['李雙雙'] = '男'
>>> d
>>> {'張cc': '男', '李雙雙': '男', '王某某': '女'}
6诬垂、 判斷dict的key是否存在

1)一是通過in判斷key是否存在
>>> if('李雙雙' in d):
>>> print('存在')
>>> 存在

  1. 通過dict提供的get方法劲室,如果key不存在,可以返回None结窘,或者自己指定的value

    print(d.get('李雙雙2'))
    None

    if(not d.get('李雙雙2')):
    print('不存在')
    不存在

    if(not d.get('李雙雙2',False)):
    print('不存在')
    不存在
    7很洋、元素的刪除 使用pop(key)

    d
    {'張cc': '男', '李雙雙': '男', '王某某': '女'}
    d.pop('王某某')
    '女'
    d
    {'張cc': '男', '李雙雙': '男'}

8、和list比較的優(yōu)缺點(diǎn)
dict
a.查找和插入的速度比較快隧枫,不會(huì)隨著key的增加而變慢
b.空間使用較多喉磁,需要占用較多的內(nèi)存
list
a.查找和插入的速度會(huì)隨著key的增加而變慢
b.空間使用少棺克,浪費(fèi)內(nèi)存少

二.set
set 就類似于一組key的無(wú)序不重復(fù)的集合
1线定、定義
使用set 要提供一個(gè)list作為輸入集合,重復(fù)的值會(huì)被過濾掉

 >>> s = set([1,2,3,3])
 >>> s
 >>> {1, 2, 3}

2娜谊、元素的添加

 >>> s.add(4)
 >>> s
 >>> {1, 2, 3, 4}

3、元素的刪除

 >>> s.remove(4)
 >>> s
 >>> {1, 2, 3}

4斤讥、set的交集
 
>>> s
>>> {1, 2, 3}
>>> n = set([2,3,4])
>>> s&n
>>> {2, 3}

5纱皆、set的并集

>>> s | n
>>> {1, 2, 3, 4}

set的原理和dict一樣,所以芭商,同樣不可以放入可變對(duì)象派草,因?yàn)闊o(wú)法判斷兩個(gè)可變對(duì)象是否相等,也就無(wú)法保證set內(nèi)部“不會(huì)有重復(fù)元素”
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铛楣,一起剝皮案震驚了整個(gè)濱河市近迁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌簸州,老刑警劉巖鉴竭,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岸浑,居然都是意外死亡搏存,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門矢洲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)璧眠,“玉大人,你說(shuō)我怎么就攤上這事读虏。” “怎么了盖桥?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵灾螃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我葱轩,道長(zhǎng)睦焕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任靴拱,我火速辦了婚禮,結(jié)果婚禮上猾普,老公的妹妹穿的比我還像新娘袜炕。我一直安慰自己,他們只是感情好初家,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布偎窘。 她就那樣靜靜地躺著乌助,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陌知。 梳的紋絲不亂的頭發(fā)上他托,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音仆葡,去河邊找鬼赏参。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沿盅,可吹牛的內(nèi)容都是我干的把篓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腰涧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼韧掩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起窖铡,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疗锐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后费彼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窒悔,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年敌买,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了简珠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虹钮,死狀恐怖聋庵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芙粱,我是刑警寧澤祭玉,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站春畔,受9級(jí)特大地震影響脱货,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜律姨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一振峻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧择份,春花似錦扣孟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸽斟。三九已至,卻和暖如春利诺,著一層夾襖步出監(jiān)牢的瞬間富蓄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工慢逾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留立倍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓氛改,卻偏偏與公主長(zhǎng)得像帐萎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胜卤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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