使用 dict 和 set
dict
Python內(nèi)置支持刀脏,全稱 dictionary淳玩,在其它語(yǔ)言中也被稱為 map谆奥, 使用鍵-值(key-value)存儲(chǔ)见坑,例如根據(jù)名字找到相關(guān)的成績(jī):
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
當(dāng)然上述的也可以使用兩個(gè) list粹污,一個(gè)存名字段多,一個(gè)存成績(jī),然后通過(guò)相同的索引去查找壮吩,但是數(shù)據(jù)量越大越慢进苍,相當(dāng)于一本詞典從頭翻到尾只為找一個(gè)字。而反觀 dict粥航,它是通過(guò) key 計(jì)算出 value 的內(nèi)存地址來(lái)進(jìn)行查找(哈希算法)琅捏,相當(dāng)于通過(guò)部首或拼音找字。
特點(diǎn):
1. 查找速度快递雀,且不隨數(shù)據(jù)量增多而變慢柄延,但是占用大量的內(nèi)存(使用空間換取時(shí)間)
(list就是數(shù)據(jù)越多越慢缀程,但是占用空間兴寻伞)
2. 一個(gè) key 只能對(duì)應(yīng)一個(gè) value,key 如果不存在則會(huì)報(bào)錯(cuò)
3. dict 內(nèi)部存放的順序和 key 放入的順序是沒(méi)有任何關(guān)聯(lián)的
4. key 值必須是不可變對(duì)象
如何判斷 key 值不存在杨凑?
法一
使用 IN 判斷滤奈,eg: 'Thomas' in d 看結(jié)果是否為 False
法二
使用 dict 提供的 get 方法,如果不存在可以返回 None(python 的交互命令行不會(huì)有任何顯示)撩满,或者自己指定的 value蜒程。 eg:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
刪除 key
要?jiǎng)h除一個(gè) key,用 pop(key)方法伺帘,其對(duì)應(yīng)的 value 也會(huì)從 dict 中刪除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
set
set 和 dict 類似昭躺,也是一組 key 的集合,只是不存儲(chǔ) value伪嫁。要?jiǎng)?chuàng)建一個(gè) set 需要提供一個(gè) list 作為輸入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
注意
1. 傳入的參數(shù) [1,2,3] 是一個(gè) list领炫,顯示{1,2张咳,3}只是告訴人們 set 的內(nèi)部是有 1帝洪,2似舵,3 這三個(gè)元素,顯示順序并不能證明 set 有序葱峡;
2. set 中的 key 是不會(huì)有重復(fù)的砚哗,如果輸入一個(gè)有重復(fù)元素的 list ,將會(huì)被自動(dòng)去重砰奕;
3. 與 dict 一樣频祝,不可放入可變對(duì)象,如果對(duì)象可變無(wú)法保證無(wú)重復(fù)元素脆淹;
修改元素
add(key) 添加元素(可以重復(fù)添加常空,但沒(méi)有效果):
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
remove(key) 刪除元素:
>>> s.remove(4)
>>> s
{1, 2, 3}
交集、并集
set 可以看成是數(shù)學(xué)意義上無(wú)序和無(wú)重復(fù)元素的集合
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
又議不可變對(duì)象
str 是不可變對(duì)象盖溺。list 是可變對(duì)象漓糙,例如對(duì)其操作,它內(nèi)部的內(nèi)容是會(huì)改變的烘嘱。
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
如果對(duì)不可變對(duì)象也進(jìn)行操作呢昆禽?使用字符串的 replace() 方法:
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc
雖然時(shí)出現(xiàn)了 Abc,但是變量 a 最后仍然是 abc蝇庭。如果第二句改一下就比較清楚了 b=a.replace('a', 'A')醉鳖, 變的是變量,它指向的是字符串對(duì)象 'abc'哮内,而字符串對(duì)象一直沒(méi)變盗棵,使用了 replace 相當(dāng)于 Python 創(chuàng)建的一個(gè)新的字符串變量。