1. 程式人生 > >python基礎之dict和set

python基礎之dict和set

算法 dict name 區別 刪除元素 哈希算法 div 數學 blog

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