1 dict
dict的創建:假設我們要根據名字找到相應的成績,利用list或者tuple表示不方便,所以需要創建dict:
d = {
'Adam' : 95,
'Lisa' : 85,
'Bart' : 59
}
我們把名字稱為key,對應的成績稱為value,dict就是通過 key 來查找 value。{} 表示這是一個dict,然后按
照key: value, 寫出來即可。最后一個 key: value 的逗號可以省略。由于dict也是集合,len() 函數可以計算任意
集合的大小:
>>> len(d)
3
dict的訪問:可以簡單地使用 d[key] 的形式來查找對應的 value,這和 list 很像,不同之處是,list 必須
使用索引返回對應的元素,而dict使用key:
>>> PRint d['Adam']95
注意: 通過 key 訪問 dict 的value,只要 key 存在,dict就返回對應的value。如果key不存在,會直接報錯:
KeyError。要避免 KeyError 發生,有兩個辦法:一是先判斷一下 key 是否存在,用 in 操作符:
if 'Paul' in d: print d['Paul']
二是使用dict本身提供的一個 get 方法,在Key不存在的時候,返回None:
>>> print d.get('Paul')None
dict的特點:(1)查找速度快,無論dict有10個元素還是10萬個元素,查找速度都一樣。而list的查找速度隨
著元素增加而逐漸下降。不過dict的查找速度快不是沒有代價的,dict的缺點是占用內存大,還會浪費很多內容,
list正好相反,占用內存小,但是查找速度慢。由于dict是按 key 查找,所以,在一個dict中,key不能重復;
(2)存儲的key-value序對是沒有順序的!這和list不一樣;
(3)作為 key 的元素必須不可變。Python的基本類型如字符串、整數、浮點數都是不可變的,都可以作為 key。
但是list是可變的,就不能作為 key。
dict的元素添加:dict是可變的,也就是說,我們可以隨時往dict中添加新的 key-value。
>>> d['Paul'] = 72
>>> print d{'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}
需要注意的是,如果 key 已經存在,則賦值會用新的 value 替換掉原來的 value。
dict的遍歷:由于dict也是一個集合,所以,遍歷dict和遍歷list類似,都可以通過 for 循環實現。直接使用
for循環可以遍歷 dict 的 key:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }>>> for key in d:... print key... LisaAdamBart
由于通過 key 可以獲取對應的 value,因此,在循環體內,可以獲取到value的值。
2 set
set的創建:有的時候,我們只想要 dict 的 key,不關心 key 對應的 value,目的就是保證這個集合的元素不會重
復,這時,set就派上用場了。set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重復,而且是無序
的,這點和 dict 的 key很像。創建 set 的方式是調用 set() 并傳入一個 list,list的元素將作為set的元素:
>>> s = set(['A', 'B', 'C'])
>>> print sset(['A', 'C', 'B'])
上述打印的形式類似 list, 但它不是 list,仔細看還可以發現,打印的順序和原始 list 的順序有可能是不同
的,因為set內部存儲的元素是無序的。
因為set不能包含重復的元素,所以,當我們傳入包含重復元素的 list,set會自動去掉重復的元素。
set的訪問:由于set存儲的是無序集合,所以我們沒法通過索引來訪問。訪問 set中的某個元素實際上就是判斷
一個元素是否在set中。我們可以用 in 操作符判斷。例如,存儲了班里同學名字的set:
>>> s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
>>> 'Bart' in sTrue
>>> 'bart' in sFalse
看來大小寫很重要,'Bart' 和 'bart'被認為是兩個不同的元素。
set的特點:(1)set的內部結構和dict很像,唯一區別是不存儲value,因此,判斷一個元素是否在set中速度很
快。(2)set存儲的元素和dict的key類似,必須是不變對象,因此,任何可變對象是不能放入set中的。(3)set存
儲的元素也是沒有順序的。
set的遍歷:由于 set 也是一個集合,所以,遍歷 set 和遍歷 list 類似,都可以通過 for 循環實現。直接使
用 for 循環可以遍歷 set 的元素:
>>> s = set(['Adam', 'Lisa', 'Bart'])>>> for name in s:... print name... LisaAdamBart
注意: 觀察 for 循環在遍歷set時,元素的順序和list的順序很可能是不同的,而且不同的機器上運行的結果也
可能不同。
set的更新:由于set存儲的是一組不重復的無序元素,因此,更新set主要做兩件事:(1)把新的元素添加到set
中;(2)把已有元素從set中刪除。
添加元素時,用set的add()方法:
>>> s = set([1, 2, 3])>>> s.add(4)>>> print sset([1, 2, 3, 4])
如果添加的元素已經存在于set中,add()不會報錯,但是不會加進去了。
刪除set中的元素時,用set的remove()方法:
>>> s = set([1, 2, 3, 4])>>> s.remove(4)>>> print sset([1, 2, 3])
如果刪除的元素不存在set中,remove()會報錯。所以用add()可以直接添加,而remove()前需要判斷。
新聞熱點
疑難解答