標籤:
dict
dict全稱dictionary(只為複習一下不常用單詞),也就是其他語言中的map,使用索引值對儲存資料,尋找速度極快。
使用方法:d = {‘key1‘:value1, ‘key2‘:value2}
尋找key對應值的方法:d[‘key1‘] 對應輸出即為value1
如未初始化,添加值的方法:d[‘key1‘] = value1_1 注意,一個key只能對應一個值,後面放入的值會把前面的值衝掉
如果key不存在,dict會報錯。通常有兩種方法可以用來檢查key是否存在。
第一種,in的使用方法:‘key1‘ in d 返回結果為true或false;
第二種,dict提供的get方法,其使用方法:d.get(‘key1‘) 如果key不存在,返回none,也可以自訂傳回值,如 d.get(‘key1‘, -1) 則key不存在時返回-1。 注意,返回none的時候Python的互動命令列不顯示結果。
刪除key的方法:d.pop(‘key1‘) 當然,對應的value也會一併刪除,而運行此方法顯示的值為value1
務必注意:dict內部存放順序和key放入的順序無關
和list相比,dict有以下特點:
尋找速度快,時間複雜度不會隨dict增大而增大
需要佔用大量記憶體,記憶體浪費多
另外需要牢記的是,key必須是不可變對象。因為dict根據key來計算value的儲存位置,如果相同的key每次計算時都得出不同的value,那dict內部就會完全混亂。通過key計算位置的方法是雜湊演算法,要保證hash的正確性,作為key的對象就不能變。Python中字串和整數都是不可變對象,可以放心作為key,而list是可變的所以不能作為key。
set
set和dict類似,也是一組key的集合,只不過不儲存值。由於key不能重複,所以set中沒有重複的元素,定義時重複元素會被自動過濾。
要建立一個set,需要一個list做輸入,建立方法:s = set([key1, key2, key3]) 此時s的顯示結果為set([key1, key2, key3]),注意此結果中的[]不再是一個list,而是告訴你set中的元素為key1,key2,key3
添加元素的方法:s.add(keyx)
刪除元素的方法:s.remove(keyx)
set可以看成數學上無序無重複元素的集合,兩個set可以做數學意義上的交集和並集的操作,如: s1和s2兩個set做交集為 s1 & s2; 做並集為 s1 | s2
set和dict原理相同,也不能放入可變對象,因為不能判斷兩個可變對象是否相等也就不能保證set中無重複元素。
不可變對象
對於不可變對象來說,調用對象的任意方法也不會改變對象自身的內容。相反,這些方法會建立新的對象並返回,這樣就保證了不可變對象永遠是不變的。
例如:對不可變對象字串進行如下操作,
a = ‘abc‘
a.replace(‘a‘, ‘A‘)
此時a.replace(‘a‘, ‘A‘)顯示的結果確實是‘Abc‘,而a顯示的結果仍舊是‘abc‘
而若對可變對象list進行如下操作,
a = [‘b‘, ‘c‘, ‘a‘]
a.sort()
則不論是a.sort()還是a,顯示的結果都是 [‘a‘, ‘b‘. ‘c‘],list內部的內容已經改變了。
注意: tuple雖然是不可變對象,但由於其內部可以存放list,所以也不適合做key值。
Python自學筆記之dict和set