---
type:slide
---
## Python Data Type
### Set 集合
#### https://colab.research.google.com/drive/1uRH8O6hCYvE2KEAg34shj3eAYqJ9BOFt?usp=sharing
---
### 還記得它們嗎?
* ### List[ ]
* ### Dict{'Key':'Value'}
* ### Tuple()
---
### Set 集合具有以下特性:
1. 集合很像 Dict,只有『鍵』,沒有『值』的字典
```
Dict {'小華':'0987388111','花花':'0987388222'} #我是字典
Set ('小華','花花','0987388111') #我是集合
```
---
### Set 集合具有以下特性:
2. 每個元素都是唯一,不會重複,不能更改。
```
a = {1,1,,2,2,3,3}
print(a)
```
#### 練習時間
---
### Set 集合具有以下特性:
3. 集合本身可變動,我們可以增加或刪除集合中的項目。
4. 集合可用來執行數學集合的操作,如交集、聯集及差集等。
---
### 新增Set 集合
#### 將「數字」or「布林」or「字串」組成一個集合
---
#### 使用 Set() 建立空集合
```
1. a = set() # 建立空集合
2. print(a)
```
#### 練習時間
---
#### 將 List 轉換成集合
```
1. b = set([1,2,3,4,5,4,3,2,1,1]) # 將List 轉為集合
2. print(b)
```
#### 練習時間
---
#### 將Dict 轉換成集合
```
1. c = set({'小華':'0987388111','小花':'0987388222'})
2. print(c)
3. print('小花' in c)
4. print('小名' not in c)
```
#### 練習時間
---
#### Tuple 轉換成集合
```
1. d = set{'apple','banana','watermelon'}
2. print(d)
3. print('orange'in d)
```
#### 練習時間
---
#### 直接建立集合 Set{}
#### set{布林,數值,字串}
```
a1 = {0,1,2,3,'apple',False}
print(a1)
```
---
#### add() 加入項目
```
a1 = {0,1,2,3,'apple','False'}
a1.add(4)
print(a1)
```
---
### remove()
使用「集合.remove(項目)」,可以將指定的項目移除,不過如果該項目不存在,就會執行錯誤。
```
a1 = {0,1,2,3,4,'apple','False'}
a1.remove(4)
print(a1)
===================================================
a1 = {0,1,2,3,4,'apple','False'}
a1.remove(5)
print(a1)
```
#### 練習時間
---
### discard()
如果不希望在移除項目時發生執行錯誤的狀況,可以使用「集合.discard(項目)」,將指定項目移除
```
a1 = {0,1,2,3,4,'apple','False'}
a1.discard(0)
a1.discard(5)
print(a1)
```
#### 練習時間
---
### 集合可使用的函式
#### len() / sum() / max() / min()
```
a1 = {1,2,3,4,5,6,7,8}
print(len(a1)) #回傳長度
print(sum(a1)) #回傳總和
print(max(a1)) #回傳最大值
print(min(a1)) #回傳最小值
```
---
## 集合運算
集合有四種運算型態,分別是「交集、聯集、差集、對稱差集」,透過下圖可以了解四種運算型態

---
#### 交集:取重複值

```
a1={1,2,3,4,10}
b1={4,5,6,7}
print(a1&b1)
```
#### 練習時間
---
#### 差集:從a1中取與b1取不重複值

```
a1={1,2,3,4,10}
b1={4,5,6,7}
print(a1-b1)
```
#### 練習時間
---
#### 聯集:取全部資料且不重複

```
a1={1,2,3,4,10}
b1={4,5,6,7}
print(a1|b1)
```
#### 練習時間
---
#### 對稱差集:取不重複值(扣除重複)

```
a1={1,2,3,4,10}
b1={4,5,6,7}
print(a1^b1)
```
#### 練習時間
---
### 布林值 Boolean
* #### True / False (是 / 否)
* #### 每個條件代表著布林值 ( True/False )
* #### 一種資料型態,可以被指派到變數中
```
x = True
print(type(x))
print(x)
```
#### 練習時間
---
### type()判斷資料型別
```
x = 1.0
print(type(x))
x = 'Jessica'
print(type(x))
x = 1
print(type(x))
```
#### 練習時間
---
### sorted()排序
* #### 利用內建函式排序資料
* #### 自行定義排序規則
* #### 官方文件上面的介紹:
```
sorted(串列名稱, reverse=False, key=rule_fn)
```
#### reverse 以及 key 都不是必要的參數,在不設定的情況底下都會有內建的預設值,而是當有需要使用到時再設定即可。
---
#### 練習時間:List 排序
```
mylist = [11,6,3,9,2,1]
print(mylist)
mylist = sorted(mylist)
print(mylist)
```
---
#### 練習時間:
```
mylist = [11,6,3,9,2,1]
mylist = sorted(mylist, reverse=True)
print(mylist)
```
---
#### 練習時間:
```
movieList = ["The Shape of Water", "Moonlight", "Superman", "Birdman", "Argo", "Spotlight"]
print(movieList)
moveList = sorted(moveList)
print(moveList)
```
---
#### 練習時間:sorted(dic)
```
dic = {"2017": "The Shape of Water", "2016": "Moonlight", "2014": "Birdman", "2015": "Spotlight"}
print(sorted(dic))
```
---
#### 練習題1:建立與基礎操作
* 建立一個集合 numbers_set,包含數字 {1, 3, 5, 7, 9}。
* 將數字 11 加入集合中。
* 從集合中刪除數字 3。
* 檢查集合中是否存在數字 7
---
#### 練習題2:集合操作 - 交集與聯集
* 建立兩個集合 set_a 和 set_b,分別包含 {1, 2, 3, 4, 5} 和 {4, 5, 6, 7, 8}。
* 找出 set_a 和 set_b 的交集,並將結果存入 intersection_set 中。
* 找出 set_a 和 set_b 的聯集,並將結果存入 union_set 中。
* 分別印出 intersection_set 和 union_set。
---
### 練習題3:集合操作 - 差集與對稱差集
* #### 建立兩個集合 set_x 和 set_y,分別包含 {10, 20, 30, 40} 和 {30, 40, 50, 60}。
* #### 找出 set_x 和 set_y 的差集,並將結果存入 difference_set 中。
* #### 找出 set_x 和 set_y 的對稱差集,並將結果存入 symmetric_difference_set 中。
* #### 分別印出 difference_set 和 symmetric_difference_set。
---
### 練習題4:使用set型別操作
數學及格同學:Tom,John,Mary,Jimmy,Sunny,Amy
英文及格同學:John,Mary,Tony,Bob,Pony,Tom,Alice
* #### 全班共有位同學?
* #### 兩科都及格的同學是哪幾位?
* #### 數學及格但英文不及格的是哪幾位?
* #### 英文及格但數學不及格的是哪幾位?
---
---
{"title":"Python Data Type - Set 集合","contributors":"[{\"id\":\"d5c4533b-d74a-4511-a670-4ee035ec8672\",\"add\":5768,\"del\":1488}]","description":"集合很像 Dict,只有『鍵』,沒有『值』的字典"}