Set
的特性為:無序、不重複、可變性,也就是說set
用於儲存唯一值並且可以在集合之間找到交集、差集、和集、子集、不相交集等,並不保證元素的順序,且不像是串列
和元組tuple
(明日會提到)能透過索引取得特定位子的元素。
大致整理一下集合相關資訊:
不可變的物件
,像是int
、str
、tuple
。所有可迭代的東西都幾乎都可放進set
,也是有不可放入集合內的東西存在,待會會提到。
利用set()
創建一個空集合或是利用大括弧{}
建立。
st = set()
print(type(st)) # <class 'set'>
對於集合的刪除可以使用remove()
、pop()
、clear()
、discard()
,前三個和先前介紹的串列 List
相同,在這邊就不再多贅述。
discard()
方法:刪除指定元素,如果元素不存在不會出錯。
可以從以下discard()
方法看出,刪除不存在的元素時並不會拋出任何的錯誤訊息,而是回傳原本的內容而已,這部分和remove()
方法有很大的不一樣。
fruits = {"apple", "banana", "mango", "lemon", "orange"}
fruits.discard("peach")
print(fruits) # {'apple', 'lemon', 'orange', 'banana', 'mango'}
add()
方法:將單一元素
加入集合,該元素必需為可雜湊(hash)的類型,也就是int
、str
、tuple
等,若是元素已經存在於集合中,那麼add()
方法不會拋出錯誤訊息也不會重複加入元素;若是傳入不可雜湊的物件(list、dict、set)則會拋出錯誤訊息TypeError
。fruits = {"apple", "banana", "mango", "lemon", "orange"}
fruits.add("peach")
print(fruits) # {'peach', 'banana', 'orange', 'apple', 'lemon', 'mango'}
update()
方法:將可迭代的物件中所有元素加入集合,可傳入一個或多個可迭代參數(list
、tuple
、set
、dict
、str
),如果要一次性傳入多筆資料的話使用update()
方法在效率上會優於add()
方法。fruits = {"apple", "banana", "mango", "lemon"}
fruits.update(["peach", "orange"])
print(fruits) # {'banana', 'peach', 'apple', 'mango', 'orange', 'lemon'}
不是所有東西都可放入集合中,集合之所以需要元素是不可變的是因為它依賴的是雜湊(hash),用來保證可以快速查詢、插入、刪除資料,如果元素是可變的那表示雜湊(hash)也會變,那麼就會破壞集合的資料結構,這個限制也與字典 dict
(過幾天會提到)相同,因為字典 dict
的key
也算是存在一個類似集合的雜湊(hash)中。
num = {[1, 2, 3], 4, 5}
print(num) # TypeError: unhashable type: 'list'
那麼今天就介紹到這,明天見ㄅㄅ!