python基礎之dict和set
dict
dict是dictionary的縮寫,python內置了字典,在其他語言中也稱為map,使用鍵值對儲存,具有極快的查找速度。
如果是只用list來實現,就需要兩個list,先在第一個list中查找,找到之後再到另一個list中查找,顯然這樣速度很慢。而且list達到很長,耗時就很長很長。。。
names = [‘Michael‘, ‘Bob‘, ‘Tracy‘]
scores = [95, 75, 85]
因為一個key只對應一個value,如果多次針對一個key賦值,那麽前面的key的value就會被覆蓋。
還有如果key不存在,就會報錯,所以我們需要提前檢查key是否存在。
刪除一個key:使用pop(key)方法,相對應的value也會被刪除。
dict可以用在需要告訴查找的很多地方,牢記的是,dict 的key必須是不可變對象,即string,tuple,numbers。
dict查找實際是用的哈希算法。
set
set是一組key的集合,但是不存儲value。由於key不能重復,所以,在set中,沒有重復的key。
創建一個set
必須傳入一個list作為輸入集合
s = set([1,2,3]);
s//{1,2,3}
set接收一個參數,就是list或tuple或者其他可叠代對象
L = [x,y,z];
s = set(L);
但是L中的元素x,y,z有任何一個可變就會報錯。
添加元素
可以重復添加,但是不會有效果
s.add(4);
刪除元素
s.remove(4);
set可以看做是數學意義上的無序和無重復元素的集合,所以兩個set可以做&(交集)和|(並集)運算。
set和dict唯一區別在於set沒有存儲對應的alue,set的原理和dict一樣,同樣不可以放入可變對象
python內部傳值
先貼一段代碼
# 對list進行測試 list0 = [1,2,"tt",["ryr","hr"]]; list1 = list0; list1[0] = 11; list1[1] = 22; list1[3][0] = "aa"; list1[3][1] = "bb"; # //對數字和字符串還有tuple進行測試 a = "yrr"; b = a; b = "rer"; c = ("gr",12,["grr",45]); d = c; d = ("grgr",22,["grr",455]); # c[0] = "grggr"; # c[1] = 22; c[2][0] = "ggrgr"; c[2][1] = "help"; print(c); print(d); print(a); print(b); print(list0); print(list1);
在python中,string,tuples,numbers是不可更改的對象,而list,dict則是可以修改的對象,我理解的修改和不可修改,是指是否能在本身上進行修改。
nfoo = 1
nfoo = 2
lstFoo = [1]
lstFoo[0] = 2
修改:雖然string,tuples,numbers可以進行修改,但是修改之後,原來內存中的那個numbers就不存在了,就被"拋棄"了,內存中又重新創建一塊區域來存儲另一個值。
但是對於list和tuples而言,修改的僅僅是內容改變,原來的那塊內存並沒有被丟棄,也沒有創建新的內存。
python基礎之dict和set