不間斷 Python 挑戰 Day 18 - 集合 (Set)

閱讀時間約 11 分鐘
Python提供集合做為其資料結構,它就如同高中數學所學集合的概念,集合的內容一般來說是具有某種特性的事物的整體,例如考試分數及格的群體、數字1到100內的所有奇數、球箱內所有球的顏色等。因此,在一個集合中,每個元素的地位都是相同且無序,並且只能出現一次,集合和集合之間,也可以進行交集、聯集、差集等的操作。集合的元素必須是不可變的(immutable),也就是當該元素的物件被創造出來後,值沒辦法被改變,若修改其值會創造出一個新的物件,例如整數(int)、浮點數(float)、字串(string)、元組(tuple)等;可變的(mutable)物件則不能做為集合的元素,例如串列(list)、字典(dict)、集合(set)等。

集合

集合可以使用大括號「{ }」或是set()函數來建立。使用大括號時和字典類似,但只有鍵,沒有值,例如以下建立一個台灣直轄市的集合:
cities_set = {"台北市", "新北市", "桃園市", "台中市", "台南市", "高雄市"}
print(cities_set)
print(type(cities_set))
執行結果:
{'高雄市', '台北市', '台中市', '桃園市', '台南市', '新北市'}
<class 'set'>
前面提過集合中的元素只能出現一次,重複出現的元素會被自動刪除,例如:
cities_set = {"台北市", "新北市", "新北市", "桃園市", "台中市", "台南市", "高雄市"}
print(cities_set)
執行結果:
{'台中市', '台北市', '高雄市', '桃園市', '台南市', '新北市'}
使用set()函數建立集合的方式如下:
  • 內容為字串:
str_set = set("This is my marathon Python challenge.")
print(str_set)
執行結果,注意重複的字母只會出現一次:
{'o', 'r', 's', 'y', 'P', 'e', 'm', 'i', '.', 'n', 't', 'a', 'c', ' ', 'l', 'g', 'h', 'T'}
  • 內容為串列,將被轉換為集合:
list_set = set(["台北市", "新北市", "桃園市", "台中市", "台南市", "高雄市"])
print(list_set)
執行結果:
{'新北市', '高雄市', '台北市', '台中市', '台南市', '桃園市'}
  • 內容為字典,其鍵將被轉換為集合,其值會被忽略:
dict_set = set({"台北市": 2531659, "新北市": 4011586, "桃園市": 2272452, "台中市": 2814422, "台南市": 1863435, "高雄市": 2746939})
print(dict_set)
執行結果:
{'台中市', '台南市', '台北市', '新北市', '桃園市', '高雄市'}
  • 內容為元組,將被轉換為集合:
tuple_set = set(("台北市", "新北市", "桃園市", "台中市", "台南市", "高雄市"))
print(tuple_set)
執行結果:
{'新北市', '高雄市', '台北市', '台中市', '台南市', '桃園市'}

空集合

空集合的建立方式只能使用set()函數,若使用大括號則和建立空字典的方式相同,會被Python認為是字典的資料型態。
empty_set = {}
print(type(empty_set))
empty_set = set()
print(type(empty_set))
執行結果:
<class 'dict'>
<class 'set'>

增加與刪除集合元素

集合元素的內容是不可變的,但集合的元素可以被增加或刪除。
  • 使用add()方法來增加集合的元素
cities_set.add("新竹市")
print(cities_set)
執行結果:
{'台中市', '新竹市', '高雄市', '桃園市', '新北市', '台南市', '台北市'}
  • 使用remove()方法來刪除集合的元素
cities_set.remove("新竹市")
print(cities_set)
執行結果:
{'台中市', '台北市', '高雄市', '新北市', '桃園市', '台南市'}

集合的操作(聯集、交集、差集、對稱差集)

聯集(Union)

假設有A、B兩個集合,若想取得A、B兩集合內的所有元素可以使用聯集,Python的運算子符號為「|」。例如以下例子:A集合是3的倍數、B集合是5的倍數,則A、B聯集為3的倍數或5的倍數。
A_set = {3, 6, 9, 12, 15}
B_set = {5, 10, 15}
AB_union = A_set | B_set
print(AB_union)
執行結果:
{3, 5, 6, 9, 10, 12, 15}

交集(Intersection)

假設有A、B兩個集合,若想取得A、B兩集合內共同存在的元素可以使用交集,Python的運算子符號為「&」。承上範例,A、B聯集為3與5的公倍數。
A_set = {3, 6, 9, 12, 15}
B_set = {5, 10, 15}
AB_intersection = A_set & B_set
print(AB_intersection)
執行結果:
{15}

差集(difference)

假設有A、B兩個集合,若想取得屬於A集合但不屬於B集合的元素可以使用差集,Python的運算子符號為「-」。承上範例,A、B差集為3的倍數但不為5的倍數。
A_set = {3, 6, 9, 12, 15}
B_set = {5, 10, 15}
AB_difference = A_set - B_set
print(AB_difference)
執行結果:
{9, 3, 12, 6}

對稱差集(symmetric difference)

假設有A、B兩個集合,若想取得屬於A集合或是B集合的元素,但排除同時屬於A集合和B集合的元素,可以使用對稱差集,Python的運算子符號為「^」。承上範例,A、B的對稱差集為3的倍數或5的倍數,但不為3和5的公倍數。
A_set = {3, 6, 9, 12, 15}
B_set = {5, 10, 15}
AB_sym_difference = A_set ^ B_set
print(AB_sym_difference)
執行結果:
{3, 5, 6, 9, 10, 12}

子集合(subset)與父集合(superset)

假設有A、B兩個集合,若A集合的所有元素都存在於B集合,則稱A集合為B集合的子集合、B集合為A集合的父集合,Python用來判斷是否為子集合的函數為issubset()、用來判斷是否為父集合的函數為issuperset(),若相等則傳回True、不相等則傳回False。
A_set = {3, 6, 9, 12, 15}
B_set = {3, 5, 6, 9, 10, 12, 15}
print(f"Is A_set a subset of B_set? {A_set.issubset(B_set)}")
print(f"Is B_set a superset of A_set? {B_set.issuperset(A_set)}")
執行結果:
Is A_set a subset of B_set? True
Is B_set a superset of A_set? True

相等集合

Python用來判斷兩集合是否相等的運算子符號為「==」,若相等則傳回True、不相等則傳回False。
A_set = {3, 6, 9, 12, 15}
B_set = {3, 5, 6, 9, 10, 12, 15}
C_set = {3, 6, 9, 12, 15}
print(f"Is A_set the same as B_set? {A_set == B_set}")
print(f"Is A_set the same as C_set? {A_set == C_set}")
執行結果:
Is A_set the same as B_set? False
Is A_set the same as C_set? True

使用for迴圈迭代

集合可以使用for迴圈迭代,但必須記得集合是無序的資料結構,不能使用索引值來取值。
for city in cities_set:
  print(city, end=" ")
執行結果:
高雄市 桃園市 台南市 新北市 台北市 台中市 

集合生成

集合和for迴圈結合,可以簡潔的方式產生元組,例如前面例子的A_set,我們手動鍵入1到15範圍內的3的倍數,其實也可以這樣產生:
A_set = {num for num in range(1, 16) if num % 3 == 0}
print(A_set)
執行結果:
{3, 6, 9, 12, 15}

程式範例

為什麼會看到廣告
47會員
36內容數
留言0
查看全部
發表第一個留言支持創作者!
Wei-Jie Weng的沙龍 的其他內容
Python依據變數有效的範圍可以區分為全域變數(Global variable)或區域變數(Local variable)。在函數內宣告的變數為區域變數,有效範圍只有在函數內,函數外部無法引用這個變數;在函數以外宣告的變數為全域變數,它的有效範圍為整個檔案,並且在函數內部也可以引用這個變數。
這篇文章將利用之前所學過的一些東西,包括if敘述、串列、while迴圈、函數等等的觀念,來實作一個撲克牌的小遊戲-21點。
在前面的文章中我們學習了關於字典的基本用法,今天再討論更多關於字典的其它用法,以及它和串列、元組等的關聯。
在程式設計中,我們會使用到一些固定不會變動的資料內容,例如一年的月份、物體的邊長、過去一周的氣溫等等,使用串列的結構固然也可以用來儲存這些資料,但串列可以被新增或刪除,不能有效保護這類不可變動的資料。因此,Python也提供了另一種形式的資料結構,稱為元組,它的資料結構和串列相同,但資料的內容不可變
當我們查字典時,會先找到想查詢的單字在字典裡的位置,才能在那個位置找到單字的定義;在Python中,也有一個類似的資料結構稱作字典,字典的鍵(key)就對應到我們要查詢的單字,字典的值(value)則是該單字的定義。
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
Python依據變數有效的範圍可以區分為全域變數(Global variable)或區域變數(Local variable)。在函數內宣告的變數為區域變數,有效範圍只有在函數內,函數外部無法引用這個變數;在函數以外宣告的變數為全域變數,它的有效範圍為整個檔案,並且在函數內部也可以引用這個變數。
這篇文章將利用之前所學過的一些東西,包括if敘述、串列、while迴圈、函數等等的觀念,來實作一個撲克牌的小遊戲-21點。
在前面的文章中我們學習了關於字典的基本用法,今天再討論更多關於字典的其它用法,以及它和串列、元組等的關聯。
在程式設計中,我們會使用到一些固定不會變動的資料內容,例如一年的月份、物體的邊長、過去一周的氣溫等等,使用串列的結構固然也可以用來儲存這些資料,但串列可以被新增或刪除,不能有效保護這類不可變動的資料。因此,Python也提供了另一種形式的資料結構,稱為元組,它的資料結構和串列相同,但資料的內容不可變
當我們查字典時,會先找到想查詢的單字在字典裡的位置,才能在那個位置找到單字的定義;在Python中,也有一個類似的資料結構稱作字典,字典的鍵(key)就對應到我們要查詢的單字,字典的值(value)則是該單字的定義。
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
十年前,我跟小悟參加了台南政府所舉辦的 24 小時不間斷進食比賽,當年,我以兩分之差,沒擠進金榜。在挑戰時間內,來不及吃狀元糕跟芋頭八寶冰,以致失掉食物王的頭銜。十年後,小悟說,要不要再來回味當年勇?我知道,年輕的我胃袋能撐船,可逝去的青春,最先反映在食慾上。我笑著說不了......
Thumbnail
持著前作的風格,《蜘蛛人:穿越新宇宙》在色彩或畫面的呈現上依舊大膽、前衛,並且嘗試藉由多重宇宙的「優勢」,在成長動畫的既有敘事上,嘗試更多不同的可能性。精彩的安排讓觀看這部作品讓成為十足的享受,並賦予了觀眾再次進場支持的充分動機。
Thumbnail
節目這邊聽 📎錄製時間: 2023.10 汪汪隊立大功! MRT(Mission Readiness Test)是難度最高的國際搜救犬認證! 但是我們有兩位英雄(一人一汪)順利通過這次的認證,拿到了優良的成績! 讓我們歡迎領犬員羅浩芳!就讓她帶著小編、江小姐還有各位聽眾,一起了解這次搜救犬
Thumbnail
這一陣子不少投資標的都在上漲 連成長性沒有科技股強的食品股也在慢慢上升中 今天記錄一下自己食品股大成的最新績效 身為雞肉雙雄的其中一雄 除了飼料、雞肉、雞蛋以外,還跨足了沙拉油、豬肉、海鮮、餐廳等事業體 幾乎可說是一檔食品ETF(還不用付管理費),進去它的官網就可以看到許多不同的事業體
Thumbnail
你現在也許單一個句子可以說得溜,但持續說話覺得尷尬的原因在於:缺乏連接詞。好的連接詞會讓口語表達更精確有力,讓韓國人聽到你說的話不需要猜測意思或重新思考,表達能力也就跟著上升!
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:惡作劇之吻、慶餘年、Good Casting、溫柔時光、鋼之鍊金術師這五個戲劇作品的主題曲。
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:必娶女人、kill me heal me、錦衣之下、101次求婚、灌籃高手這五個戲劇作品的主題曲。
近期許多地方受到洪水以及颱風的侵襲 但包你發的線路及網路穩定度完全不受到影響 大家可以放心,我們是24小時全年無休不間斷 就算你半夜三點要玩包你發也完全OK 不會像有些系統只在白天開放 而同樣的穩定度也是一大考驗 在這種供電不穩定的情況 也有可能導致其他遊戲斷線 但包你發機房穩定、有備用電源 完全不
Thumbnail
疫情長時間帶來了減少開放性的社交機會,最直接的影響莫過於情緒勒索造成的封閉性失調,感謝國立台灣戲曲學院傑出校友,為身心障礙的大寶寶們帶來一系列精彩的演出,透過精心策劃的舞蹈及雜耍表演,帶給住民體驗了跟以往不同的志工服務內容,見到了久違住民
Thumbnail
每一次TDCA的關愛陪伴,都讓受贈的服務對象感受到滿滿的幸福感,一起協力完成手作皮革鑰匙圈,每一針每一線都在訓練孩子們手眼協調的肢體,透過不同花色皮革來搭配,不僅訓練孩子對色彩的辨識能力,同時也在培養眼界裡的審美觀噢!
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
十年前,我跟小悟參加了台南政府所舉辦的 24 小時不間斷進食比賽,當年,我以兩分之差,沒擠進金榜。在挑戰時間內,來不及吃狀元糕跟芋頭八寶冰,以致失掉食物王的頭銜。十年後,小悟說,要不要再來回味當年勇?我知道,年輕的我胃袋能撐船,可逝去的青春,最先反映在食慾上。我笑著說不了......
Thumbnail
持著前作的風格,《蜘蛛人:穿越新宇宙》在色彩或畫面的呈現上依舊大膽、前衛,並且嘗試藉由多重宇宙的「優勢」,在成長動畫的既有敘事上,嘗試更多不同的可能性。精彩的安排讓觀看這部作品讓成為十足的享受,並賦予了觀眾再次進場支持的充分動機。
Thumbnail
節目這邊聽 📎錄製時間: 2023.10 汪汪隊立大功! MRT(Mission Readiness Test)是難度最高的國際搜救犬認證! 但是我們有兩位英雄(一人一汪)順利通過這次的認證,拿到了優良的成績! 讓我們歡迎領犬員羅浩芳!就讓她帶著小編、江小姐還有各位聽眾,一起了解這次搜救犬
Thumbnail
這一陣子不少投資標的都在上漲 連成長性沒有科技股強的食品股也在慢慢上升中 今天記錄一下自己食品股大成的最新績效 身為雞肉雙雄的其中一雄 除了飼料、雞肉、雞蛋以外,還跨足了沙拉油、豬肉、海鮮、餐廳等事業體 幾乎可說是一檔食品ETF(還不用付管理費),進去它的官網就可以看到許多不同的事業體
Thumbnail
你現在也許單一個句子可以說得溜,但持續說話覺得尷尬的原因在於:缺乏連接詞。好的連接詞會讓口語表達更精確有力,讓韓國人聽到你說的話不需要猜測意思或重新思考,表達能力也就跟著上升!
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:惡作劇之吻、慶餘年、Good Casting、溫柔時光、鋼之鍊金術師這五個戲劇作品的主題曲。
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:必娶女人、kill me heal me、錦衣之下、101次求婚、灌籃高手這五個戲劇作品的主題曲。
近期許多地方受到洪水以及颱風的侵襲 但包你發的線路及網路穩定度完全不受到影響 大家可以放心,我們是24小時全年無休不間斷 就算你半夜三點要玩包你發也完全OK 不會像有些系統只在白天開放 而同樣的穩定度也是一大考驗 在這種供電不穩定的情況 也有可能導致其他遊戲斷線 但包你發機房穩定、有備用電源 完全不
Thumbnail
疫情長時間帶來了減少開放性的社交機會,最直接的影響莫過於情緒勒索造成的封閉性失調,感謝國立台灣戲曲學院傑出校友,為身心障礙的大寶寶們帶來一系列精彩的演出,透過精心策劃的舞蹈及雜耍表演,帶給住民體驗了跟以往不同的志工服務內容,見到了久違住民
Thumbnail
每一次TDCA的關愛陪伴,都讓受贈的服務對象感受到滿滿的幸福感,一起協力完成手作皮革鑰匙圈,每一針每一線都在訓練孩子們手眼協調的肢體,透過不同花色皮革來搭配,不僅訓練孩子對色彩的辨識能力,同時也在培養眼界裡的審美觀噢!