Python自學筆記之dict和set

jopen 9年前發布 | 19K 次閱讀 Python Python開發

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有以下特點:

  1. 查找速度快,時間復雜度不會隨dict增大而增大

  2. 需要占用大量內存,內存浪費多

另外需要牢記的是,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值。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!