iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0

Set的特性為:無序、不重複、可變性,也就是說set用於儲存唯一值並且可以在集合之間找到交集、差集、和集、子集、不相交集等,並不保證元素的順序,且不像是串列元組tuple(明日會提到)能透過索引取得特定位子的元素。

大致整理一下集合相關資訊:

  • 特性
    1. 唯一性:集合內的每個元素都是唯一的,如果將重複的元素加入集合中會自動忽略重複的部分。
    2. 可變性:集合本身就可以操作新增或是刪除,但集合內的元素必需為不可變的物件,像是intstrtuple
    3. 無順序性:集合在執行的過程可看到某種輸出後的樣子,但實際上那並不是集合所儲存的真正順序。
  • 用途
    1. 過濾重複資料
    2. 判斷元素是否存在
    3. 進行數學集合運算(交集、聯集、差集等)

所有可迭代的東西都幾乎都可放進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)的類型,也就是intstrtuple等,若是元素已經存在於集合中,那麼add()方法不會拋出錯誤訊息也不會重複加入元素;若是傳入不可雜湊的物件(list、dict、set)則會拋出錯誤訊息TypeError
fruits = {"apple", "banana", "mango", "lemon", "orange"}
fruits.add("peach")
print(fruits) # {'peach', 'banana', 'orange', 'apple', 'lemon', 'mango'}
  • update()方法:將可迭代的物件中所有元素加入集合,可傳入一個或多個可迭代參數(listtuplesetdictstr),如果要一次性傳入多筆資料的話使用update()方法在效率上會優於add()方法。
fruits = {"apple", "banana", "mango", "lemon"}
fruits.update(["peach", "orange"])
print(fruits) # {'banana', 'peach', 'apple', 'mango', 'orange', 'lemon'}

不是所有東西都可放入集合中,集合之所以需要元素是不可變的是因為它依賴的是雜湊(hash),用來保證可以快速查詢、插入、刪除資料,如果元素是可變的那表示雜湊(hash)也會變,那麼就會破壞集合的資料結構,這個限制也與字典 dict(過幾天會提到)相同,因為字典 dictkey也算是存在一個類似集合的雜湊(hash)中。

num = {[1, 2, 3], 4, 5}
print(num) # TypeError: unhashable type: 'list'

那麼今天就介紹到這,明天見ㄅㄅ!


上一篇
筆記Day9:串列 List
系列文
Python 學習筆記10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言