Python dict.set

Python內置了字典:dict的支持,dict全稱dictionary,在其餘語言中也稱爲map,使用鍵-值(key-value)存儲,具備極快的查找速度。python

舉例:web

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} ui

>>> d['Michael'] 95spa

dict能夠按照名字和成績的對照表,按照名字查成績。使用 key-value的形式進行存儲,速度極高。code

dict還能夠經過key放入,舉例:orm

>>> d['Adam'] = 67 對象

>>> d['Adam'] 67
因爲一個key只能對應一個value,因此,屢次對一個key放入value,後面的值會把前面的值沖掉,若是key不存在,dict就會報錯。
ci

要避免key不存在的錯誤,有兩種辦法,一是經過in判斷key是否存在:rem

>>> 'Thomas' in d
False
字符串

二是經過dict提供的get()方法,若是key不存在,能夠返回None,或者本身指定的value:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)  % 後面的參數能夠本身定義此例子是-1
-1

要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除:

>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

 

set和dict相似,也是一組key的集合,但不存儲value。因爲key不能重複,因此,在set中,沒有重複的key。key在set中也不是按照順序排列的。

相似數學的集合概念

要建立一個set,須要提供一個list做爲輸入集合:

>>> s = set([1, 1, 2, 2, 3, 3])

>>> s {1, 2, 3}  %能夠看出,重複的數據自動被過濾

s.add(key) 用於添加數據,單數重複數據沒效果

s.remove(key) 用於刪除元素。 

應爲set和數學意義的無序元素相同,因此能夠作交集,並集等操做

S1 & S2  交集

S1 | S2   並集

list是可變對象,對list進行操做時,list內部是能夠變化的。

分類操做

>>> a = ['c', 'b', 'a']

>>> a.sort()   %分類

>>> a ['a', 'b', 'c']

而對於不可變對象,好比str,對str進行操做呢:

>>> a = 'abc'
>>> a.replace('a', 'A')  %替換
'Abc'
>>> a
'abc'

雖然字符串有個replace()方法,也確實變出了'Abc',但變量a最後還是'abc',應該怎麼理解呢?

咱們先把代碼改爲下面這樣:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

記住a是變量,而‘abc’纔是字符串對象。

咱們常常說,對象a的內容是'abc',但實際上是指,a自己是一個變量,它指向的對象的內容纔是'abc'

┌───┐                  ┌───────┐
│ a │─────────────────>│ 'abc' │
└───┘                  └───────┘

當咱們調用a.replace('a', 'A')時,實際上調用方法replace是做用在字符串對象'abc'上的,而這個方法雖然名字叫replace,但卻沒有改變字符串'abc'的內容。相反,replace方法建立了一個新字符串'Abc'並返回,若是咱們用變量b指向該新字符串,就容易理解了,變量a仍指向原有的字符串'abc',但變量b卻指向新字符串'Abc'了:

┌───┐                  ┌───────┐
│ a │─────────────────>│ 'abc' │
└───┘                  └───────┘
┌───┐                  ┌───────┐
│ b │─────────────────>│ 'Abc' │
└───┘                  └───────┘

因此,對於不變對象來講,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會建立新的對象並返回,這樣,就保證了不可變對象自己永遠是不可變的。

相關文章
相關標籤/搜索