Python 101 基礎教學 (8) - Collections:set、dictionary
這篇想要介紹另外兩個資料型態:set 與 dictionary。這兩個類型的存在與 list 比較,更具效能的優勢。用 set/dict 在查找資料時,大部分情況都是不需要做"掃描"的動作。
這篇想要介紹另外兩個資料型態:set 與 dictionary。這兩個類型的存在與 list 比較,更具效能的優勢。用 set/dict 在查找資料時,大部分情況都是不需要做"掃描"的動作。
如果有個 list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
,你想要找出是否 list 裡包含 6
,你需要做掃描(遍歷)的動作,意指你要從第一筆資料 1
開始查看,直到 6
的時候才能知道 6
存在於這個 list裡,但使用 set/dict 是不需要的。
你可能會問說有什麼好處?假設今天 list 裡面有 100 萬筆資料,那你在查找東西的時候就會遇到嚴重的效能問題。相比來說如果使用 set/dict,在這個資料量級裡取用資料還是相當有效率的。
集合 Set
set 是跟 list 不一樣的地方是,資料沒有順序。用 add
把資料存進去;用 remove
或是 discard
把資料移除;用 in
檢查元素是否存在於 set 裡。這裏個操作都是非常有效率的。
s = set() # 宣告空的 set
s.add(1)
s.add(2)
s.add(3)
print(s) # output: {1,2,3}
# discard
s.discard(1)
print(s) # output: {1, 2}
s.discard(4) # set裡面沒有4,什麼事都不會發生
# remove
s.remove(2)
print(s) # output: {1}
s.remove(4) # set裡面沒有4,報錯
# 初始宣告
s = {1, 2, 3}
print(s) # output: {1, 2, 3}
# 查找資料非常有效率
print(1 in s) # output: True
print(4 in s) # output: False
set 是 iterable,所以可以用 for loop去走訪,只是如上述所說,是無序的
st = 'abcde'
s = set(st) # 把 string 轉成 set
# 以下印出 b d c a e(順序無法保證)
for e in s:
print(e)
字典 Dictionary
dict 跟 set 一樣都是一個很有效率的資料結構。字典 dict 的組成是以 key/value 的方式存取({ key1: value1, key2: value2 })。
# 宣告空字典(2種方法)
d = {}
d2 = dict()
d[1] = 2
print(d[1]) # output: 2
print(d) # output: {1:2}
print(1 in d) # output: True
d['yo'] = 'abc'
print(d['yo']) # output: 'abc'
print(d) # output: {1: 2, 'yo': 'abc'}
print('yo' in d) # output: True
print(2 in d) # output: False
print(d[2]) # 報錯 KeyError
# 初始宣告
d = {1: 2, 3: 4}
print(d) # output: {1: 2, 3: 4}
在 python3.6 以前 dict 跟 set 一樣是沒有順序的如果要使用有順序的 dict 要另外import OrderedDict。但是python3.7以後因為實作方式的改變,走訪dict時會依照插入順序。
d = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
# 以下印出keys:k1 k2 k3
for e in d:
print(e)
# 以下印出keys與values: k1 v1 k2 v2 k3 v3
for k, v in d.items():
print(k, v)
# 以下印出keys:k1 k2 k3
for k in d.keys():
print(k)
# 以下印出values:v1 v2 v3
for v in d.values():
print(v)
print(d.keys()) # output: dict_keys(['k1', 'k2', 'k3'])
print(d.values()) # output: dict_values(['v1', 'v2', 'v3'])
# d.keys()/d.values() 並不是list,但可以轉成list
print(list(d.keys())) # output: ['k1', 'k2', 'k3']
print(list(d.values())) # output: ['v1', 'v2', 'v3']
在程式語言裡,要提高你的程式效能,很多時候就是用空間換時間。如果要寫出高效程式,就必須熟用 set/dict。
繼續閱讀: