## 03-2 Python資料結構 ###### - Python 小社課 - ###### **Gino** --- ## Python內建資料結構 - list - tuple - **◆set◆** - dict --- ## set - 集合 **Python內建資料結構 - 3** --- ### 數學上的集合 ---- ![](https://i.imgur.com/UIjXry0.png) 一堆元素形成的群組 記號:$S = \{1, 2, 3, 4, 5, 6, ...\}$ ---- ![](https://i.imgur.com/UIjXry0.png) 集合內的元素沒有順序性 它只是描述「這些元素被歸類為同一類」 ---- ![](https://i.imgur.com/RB6PrYJ.png) - $a$ 屬於 集合$A$ - $a \in A$ ---- ![](https://i.imgur.com/5bUVGo6.png) - $A \subset B \iff \forall a \in A, a \in B$ - 此時稱$A$ **包含於** $B$,$A$就是$B$的小孩(**子集合**) ---- ![](https://i.imgur.com/aBBjtkJ.png) - $A$ 是 $B$ 的子集,$B$ 也是 $A$ 的子集 - 只有一種情況 $\rightarrow$ $A = B$ - $A = B \iff A \subset B \land B \subset A$ 好ㄅ這其實有點廢話 ---- ### 集合運算 ---- ![](https://i.imgur.com/6bpdQL3.png) 集合$A$ ---- ![](https://i.imgur.com/0Vjnaon.png) 集合$B$ ---- ![](https://i.imgur.com/gheeXrq.png) - 宇集 - 包含所有東西的集合 - 記號為$\mathbb{U}$ ---- ![](https://i.imgur.com/UhjDxM8.png) - 空集 - 什麼東西都沒有的集合 - 記號為$\emptyset$ ---- ![](https://i.imgur.com/OPQGEJI.png) $A$的補集($\lnot A$) ---- ![](https://i.imgur.com/YV98Zow.png) $A$和$B$的聯集($A \cup B$) ---- ![](https://i.imgur.com/Alp0CVt.png) $A$和$B$的交集($A \cap B$) ---- ![](https://i.imgur.com/nFe1Ihb.png) 差集 $A - B$ ---- ![](https://i.imgur.com/8l3cC3z.png) 差集$B - A$ ---- ![](https://i.imgur.com/F9RPNHX.png) 對稱差集($A \ \triangle \ B$) --- ### Python Set的特點 ---- 跟數學的set幾乎一樣 1. 沒有重複元素 2. set裡面可以有各種型態的資料 除了list, set, dict以外 --- ### Set - **- 建立 -** - 修改 - 檢查&查詢 - 集合運算 - 遍歷 ---- ```python= # 有初始資料的set s = {1, 2, 3, 4} s = set([1, 2, 3, 4]) # 空的set s = set() # for迴圈建立set s = {i for i in range(1, 5)} # {1, 2, 3, 4} ``` ---- 備註 建立空的set不能用{} ```python s = {} print(type(s)) # <class 'dict'> ``` {}會被當成空的**字典**(等等會介紹) ---- frozenset:也是set,但是建立好就不能修改 (所以速度會比較快) ```python= s = frozenset([1, 2, 3, 4]) ``` --- ### Set - 建立 - **- 修改 -** - 檢查&查詢 - 集合運算 - 遍歷 ---- ```python= s = {} s.add(2) # {2} ``` 新增單一元素 ---- ```python= s = {} s.update([1, 2, 3]) # {1, 2, 3} ``` 新增多個元素 ---- ```python= s = {1, 2, 3} s.remove(2) # {1, 3} ``` 刪除某個元素 ---- 做刪除操作時 集合裡面沒有該元素的話程式就會出錯 最好先檢查有沒有該元素 ```python= s = {1, 2, 3} if 2 in s: s.remove(2) ``` ---- ```python= s = {1, 2, 3} s.clear() ``` 清空整個集合 --- ### Set - 建立 - 修改 - **- 檢查&查詢 -** - 集合運算 - 遍歷 ---- ```python= if a in A: ... ``` 檢查a是否屬於A ---- ```python= if A.issubset(B): ... ``` 檢查A是否為B的子集(A是否**包含於**B) - (if A is subset of B) - (if A.issubset(B)) ---- ```python= if B.issuperset(A): ... ``` 檢查B是否為A的母集(B是否**包含**A) - (if B is superset of A) - (if B.issuperset(A)) ---- ```python= if A == B: ... ``` 檢查A是否等於B --- ### Set - 建立 - 修改 - 檢查&查詢 - **- 集合運算 -** - 遍歷 ---- ```python= A | B # 聯集 A & B # 交集 A - B # 差集A - B B - A # 差集B - A A ^ B # 對稱差集 ``` ---- ```python= A = {1, 2, 3} B = {1, 2, 4} C = A | B print(C) # {1, 2, 3, 4} ``` --- ### Set - 建立 - 修改 - 檢查&查詢 - 集合運算 - **- 遍歷 -** ---- ```python= s = {1, 2, 3, 4, 5, 6} for i in s: print(i) ``` for迴圈 每次取出的資料順序都不同 基本上遍歷set沒什麼用 除非想要生成隨機排列(? --- ## Python內建資料結構 - list - tuple - set - **◆dict◆** --- ## dict - 字典 **Python內建資料結構 - 4** --- ![](https://i.imgur.com/dinNeBJ.jpg =600x) dict:顧名思義,就是字典 可以像字典一樣 快速查詢某個「單字」對應到的「解釋」 ---- 單字:key 對應到想要查的解釋:value ![](https://i.imgur.com/fKzLNlO.png) ---- ## dict的性質 ---- 1. 不會有兩個相同的key存在 2. key 可以是各種型態的資料,除了list, set, dict以外 ---- ### dict - **- 建立 -** - 修改 - 檢查&查詢 - 遍歷 ---- ```python= # 有初始資料的dict menu = {"Apple": 20, "Banana": 10, "Cucumber": 25} menu = dict(Apple=20, Banana=10, Cucumber=25) # 空的dict menu = {} menu = dict() # for迴圈建立dict fruit = ["Apple", "Banana", "Cucumber"] price = [20, 10, 25] menu = {fruit[i]: price[i] for i in range(0, 3)} ``` ---- ### dict - 建立 - **- 修改 -** - 檢查&查詢 - 遍歷 ---- ```python= menu["Apple"] = 30 ``` 直接修改key對應到的value ---- ```python= del menu["Banana"] menu.pop("Banana") ``` 刪除某個key ---- ```python= print(menu.pop("Banana")) # 10 ``` pop操作還會回傳value (刪除"Banana",回傳"Banana"對應的價格 $\rightarrow$ 10) ---- 做刪除操作時 字典裡面沒有那個key的話程式就會出錯 最好先檢查有沒有那個key ```python= if "Apple" in menu: menu.pop("Apple") ``` --- ### dict - 建立 - 修改 - **- 檢查&查詢 -** - 遍歷 ---- ```python= print(menu["Cucumber"]) # 25 ``` 查詢:dict[key] ---- ```python= if "Apple" in menu: ... if "Apple" in menu.keys(): ... ``` 查詢key有沒有在dict裡面 ---- ```python= if 25 in menu.values(): ... ``` 查詢value有沒有在dict裡面 --- ### dict - 建立 - 修改 - 檢查&查詢 - **- 遍歷 -** ---- ```python= menu = {"Apple": 20, "Banana": 10, "Cucumber": 25} for fruit in menu: print(fruit, menu[fruit]) # "Apple" 20 # "Banana" 10 # "Cucumber" 25 ``` for迴圈 取出來的資料有固定順序 ---- ```python= # 遍歷所有key for fruit in menu.keys(): ... for fruit in menu: ... # 便利所有value for price in menu.values(): ... ``` ---- ```python= for item in menu.items(): print(item) # ("Apple", 20) # ("Banana", 10) # ("Cucumber", 25) ``` items()會把key, value綁在一起變成一個tuple
{"metaMigratedAt":"2023-06-15T16:43:25.564Z","metaMigratedFrom":"YAML","title":"03-2 Python資料結構","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"spotlight\":{\"enabled\":false}}","contributors":"[{\"id\":\"ac1507e0-f05c-4708-bdd2-c56d13fb0dbb\",\"add\":14918,\"del\":9911}]"}
    319 views