Day4 dict和set

dict  -- dictionary
    一組key的集合,包含key與value的對應。   
    Python內置的字典,在其餘語言中稱爲map,使用key-value存儲,具備極快的查找速度。
和list比較,dict的特色:
    dict的查找和插入速度極快,不會隨着key的增長而變慢。
    dict須要佔用大量的內存,內存浪費多。
    list的查找和插入時間隨着元素的增長而增長。
    list佔用空間小,浪費內存不多。
dict是一種用內存空間換取運行時間的一種方法
    dict能夠用在須要高速查找的地方,幾乎無處不在。
dict的key必須是不可變對象,由於dict根據key來計算value的存儲位置,若是key變化了,那麼value存儲位置就不一樣,dict內部就混亂了。經過key計算位置的算法成爲Hash。
要保證Hash的正確性,做爲key的對象就不能變化。字符串、整數等都是不可變對象,而list是可變的,因此list不能做爲key。    
簡單介紹一下dict:   
        成績對照表
        可使用兩個list來完成,如:
            names = ['Alias','Billy','David']
            scores = [90,60,75]
        給定名字後,根據名字在list的位置,再去另外一個list中的對應位置取出元素,獲得成績。 list越長,耗時越多。
       
        使用dict來實現,如:
            result = { 'Alias':97,'Billy':60,'David',75 }
            result[ 'Alias' ]
        這種方式,key和value是一一對應的,存放數據時,必須根據key算出value的存放位置,這樣在取值時纔會根據key直接拿到value. 一個key只能對應一個值,若是一個dict中有兩個key相同時(一個key出現兩次), 後出現的key的值會覆蓋以前出現的相同key的值.
       
    ##dict中存放key的順序與錄入順序無關。
   
將數據存入dict
    1.初始化放入
        result = { 'a':20 , 'b':30, 'c':40 }
    2.經過key放入
        result['abc'] = 12
       
    ##若是key不存在,在調用時會報錯。
        1.經過 in 來判斷key是否存在。
            'abcd' in result
        2.經過get()來獲取key對應的值,若是key不存在, 則返回None
            可若是key不存在,返回None, 或者爲不存在的狀況指定返回的value。
            如:
                co = { 'Alias':1 , 'Billy':2 , 'Cyndi':3 }
                co.get('David')
                co.get( 'David' , 4 )
從dict中刪除
    pop()
        co.pop('Alias')
        若是不指定pop()中的key ,會報錯。 這一點與list不一樣,list會刪除掉最後一個元素。
       
set
和dict相似,也是一組key的集合,可是不存儲value。因爲key不能重複,set中沒有重複的key。
建立一個set
    建立set須要提供一個list做爲輸入集合。
    s = set( [1,2,3,4] )
    或
    li = [1,2,3,4]
    s = set( li )
   
    set內的list中的元素順序不表示set是有序的。
    重複元素會被自動過濾。   
添加元素到set中
    add()
    s.add('a')
   
    list不能做爲元素添加到set,會報錯。由於list是可變對象。set與dict都不支持將可變對象做爲key。
   
刪除set中的元素
    remove()
    s.remove(4)
   
    一次只能remove一個元素。
   
set能夠看作是一個數學意義上的集合,所以多個set之間能夠作數學意義上的交集並集操做。
    >>> s1 = set( [1,2,4,8,10,28] )
    >>> s2 = set( [2,4,6,8,10,12] )
    >>> s1 & s2
    {8, 2, 10, 4}       #交集
    >>> s1 | s2
    {1, 2, 4, 6, 8, 10, 12, 28}     #並集
 
不可變對象
在此先引入一個新函數 replace()
    a='abc'
    a.replace('a','A')
   
以前例子裏講,str、int等類型數據都是不可變對象,那麼,若是對這些不可變對象進行replace操做,這些對象是否是已經再也不「不可變」了呢?
            >>> a = 'abc'
            >>> a.replace('a','BBBBBB')
            'BBBBBBbc'
    實際上, replace以後,再進行print(a) ,會發現 對象(變量)a的值依然是 abc,也就是說,對象a實際上也是一個變量,只不過對象a指向的內容纔是str 'abc' , replace以後其實是新建了一個新的變量,能夠經過下面的邏輯來解釋這個現象:
            >>> a ='abc'             >>> print(a)             abc             >>> b = a.replace('a','HHHHH')             >>> print(b)             HHHHHbc             >>> print(a)             abc     因此,對於不可變對象來講,調用對象的任意方法都不會改變對該對象自身的內容,僅僅會建立新的對象並返回,這樣就保證了不可變對象自己是永遠不可變的。
相關文章
相關標籤/搜索