標籤:python
重要的資料類型Dict和Set
dict通過key 尋找value(key和value關聯)
花括弧{ }表示這是一個dict,然後按照key:value,寫出來即可。最後一個key:value的都好可以省略
注意: 單元素的tuple必須在後面多家加一個逗號
dict最後的逗號可以省略
由於dict也是集合,len()函數可以計算任意集合的大小
>>len(d)
3 注意:一個key-value算一個,因此,dict大小為3
訪問dict
可以簡單的使用d[key] 的形式來尋找對應的value,這和list很像,不同之處是,list必須使用索引返回對應的元素,而dict直接使用key(通過key訪問dict的value,只要key存在,dict就返回對應的value,如果key不存在,會直接報錯:keyerror)
Dict 的特點:
知識點:dict尋找速度快。List尋找速度隨著元素增加而逐漸下降。
缺點:記憶體佔用大。list慢但記憶體佔用小
dict的第一特點是尋找速度快,無論dict有10個元素還是10萬個元素,尋找速度都一樣。而list的尋找速度隨著元素增加而逐漸下降
不過dict的尋找速度快不是沒有代價的,dict的缺點是佔用記憶體大,還會浪費很多內容,而list正相反,佔用記憶體小,但是尋找速度慢
Dict的第二個特點是儲存的key-value序對視沒有順序的!這和list不同(dict是按key尋找的,所以在一個dict中,key不能重複)
例如:
d={
‘Adam’:95,
‘Lisa’:85,
‘Bart’:59
}
>>print d
{‘Lisa’:85,’Adam’:95,’Bart’:59}
列印的順序不一定是我們建立時的順序,而且不同的機器列印的順序都可能不同,這說明:dict內部是無序的,不能用dict 儲存有序的集合
dict的第三個特點是作為key的元素倪新雨不可變,python的基本類型如字串、整數、浮點數都是不可變的,都可以作為key。但是list是可變的,就不能作為key
不可變這個限制僅作用於key,value是否可變無所謂
更新dict
Dict是可變的,即我們可以隨時王dict 中添加新的key-value.例如:
>>d[‘Paul’]=72
>>print d
{‘Lisa’:85,’Paul’:72,’Adam’:95,’Bart’:59}
如果key已經存在,則複製會用心的value替換原來的value
>>d[‘Bart’]=60
>>print d
{‘Lisa’:85,’Paul’:72,’Adam’:95,’Bart’:60}
遍曆dict
由於dict也是一個集合,所以遍曆dict和遍曆list類似,都可以通過for迴圈實現
直接使用for迴圈可以便利dict的key
>>d={‘Lisa’:85,’Adam’:95,’Bart’:59}
>>for key in d:
… print key
…
Adam
Lisa
Bart
由於通過key可以擷取對應的value,因此,在迴圈體內,可以擷取到value的值
d={
‘Adam’:95,
‘Lisa’:85,
‘Bart’:59
}
for key in d:
print key+”:”,d[key]
運行結果:
Lisa: 85
Adma: 95
Bart: 59
Set
Dict的作用是建立一組key和一組value的映射關係,dict的key是不能重複的
Set持有一系列元素,這一點和list很像,但是set的元素沒有重複,而且是無序的,這點和dict的key很像
建立set的方式是調用set()並傳入一個list,list的元素將作為set的元素
>>s=set([‘A’ , ’B’ , ’C’])
>>print s
Set([‘A’ ,’C’,’B’ ])
注意:可以看出列印的順序與原始的list順序有可能不同,因為set內部儲存的元素是無序的
>>s=set([‘A’ , ’B’ , ’C’ , ‘C’])
>>print s
Set([‘A’ ,’C’,’B’ ])
>>len(s)
3
結果顯示:因為set不能包含重複的元素,所以set會自動去掉重複的元素,原來的list有4個元素,但是set只有3個
編程任務:請用set表示班裡的4位同學:Adma,Lisa,Bart,Paul
>>s=set([‘Adma’,’Lisa’,’Bart’,’Paul’])
print s
運行結果:
set([‘Lisa’,’Paul’,’Adma’,’Bart’])
訪問set
由於set儲存的是無序集合,所以我們沒法通過索引來訪問,訪問Set中的某個元素實際上就是判斷一個元素是否在set中,可以用in操作符判斷
>>s=set([‘Adma’,’Lisa’,’Bart’,’Paul’])
>>’Bart’ in s
True
>>’Bill’ in s
False
>>’bart’ in s
False
注意:大小寫(區分大小寫)
Set的特點:
Set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快,Set儲存的元素和dict的key類似,必須是不變對象,因此,任何可變對象是不能放入set中的。最後,set儲存的元素也是沒有順序的
例如:判斷使用者輸入是否是一個有效星期?
Weekdays=set([‘Mon’,’Tue’,’Wed’,’Thu’,’Fri’,’Sat’,’Sun’])
X=’???’ #使用者輸入的字串
if X in weekdays:
print ‘input ok’
else
print ‘input error’
遍曆set
由於set也是一個集合,所以,遍曆set和遍曆list類似,都可以通過for迴圈實現
>>s=set([‘Adma’,’Lisa’,’Bart’])
>>for name in s:
… Print name
…
Lisa
Adma
Bart
注意:for迴圈在遍曆set是,元素的順序和list的順序很可能不同
更新set(add ,remove)
由於set儲存的是一組不重複的無序元素,因此,更新set主要做兩件事:
。是把新的元素添加到set中
。是把已有元素從set中刪除(前提是元素存在)
所以用add()可以直接添加,而remove()前需要判斷
Python學習筆記(3)