--- title: ch05. Python 集合、字典的基本運算 - Set、Dictionary By 彭彭 tags: 彭彭, 學習, 筆記 --- # 影片大綱 1. 集合的基本運算: 1.1 建立集合、使用 in 和 not in。 1.2 集合的交集、聯集、差集、反交集運算。 1.3 將字串的字母拆解成集合。 2. 字典的基本運算: 2.1 鍵值對 (key-value pair) 基本操作。 2.2 使用 in 和 not in 判斷 key 是否存在。 2.3 使用 del 刪除鍵值對。 2.4 以列表的資料為基礎,產生字典。 # 影片 {%youtube L3-KuGYhw78 %} # 筆記 集合就是一群資料放在一起,沒有順序的概念。 - 判斷資料是否存在: 使用 in 和 not in 運算符號。 - 交集、聯集: 使用 & 和 | 運算符號。 - 差及、反交集: 使用 - 和 ^ 運算符號。 - 字串拆解為集合: set() 字典就是鍵值對(Key-Value Pair) - Key 對應 Value - 字典[Key] - 字典[Key]=Value - 判斷資料是否存在: 使用 in 和 not in 運算符號。 - 刪除鍵值對: 使用 del 運算關鍵字 - 從列表建立字典: 以列表為基礎來建立字典 :::success **注意** - 基本的交集、聯集、差集、反交集,一定要會 - 字串拆解為集合: set() - 從列表建立字典: 以列表為基礎來建立字典 ::: --- # YT留言 ``` # 集合的運用 s1={3,4,5} print(3 in s1) print(10 in s1) print(10 not in s1) s2={4,5,6,7} s3=s1&s2 # 交集︰取兩個集合中,相同的資料 print(s3) s3=s1|s2 # 聯集︰取兩個合中的所有資料,但不重複取 print(s3) s3=s1-s2 # 差集︰從 s1 中,減去和 s2 重疊的部分 print(s3) s3=s1^s2 # 反交集︰取兩個集合中,非重複的部分 print(s3) s=set("Hello") # 把字串中的字母折拆成集合︰ set(字串) print(s) print("H" in s) print("A" in s) # 字典的運用︰key-value 配對 dic={"apple":"蘋果","bug":"蟲蟲"} print(dic["apple"]) dic["apple"]="小蘋果" print(dic["apple"]) dic={"apple":"蘋果","bug":"蟲蟲"} print("apple" in dic) # 判斷 key 是否存在 print("test" in dic) print("test" not in dic) print(dic) del dic["apple"] # 刪除字典中的鍵值對 (key-value pair) print(dic) dic={x:x*2 for x in [3,4,5]} # 從列表的資料中產生字典 print(dic) ``` ``` 我自己測試: word = "Hello" print("H" in word) 也是true 算是一個補充拉~ XD --- 建議直接將string 看成 一特殊list 意即: Strings=[ 'H' ,'e' ,'l' ,'l' ,'o' ] ``` ``` 請問一下老師 我打了 dic = {n: n*2 for n in [6, 4, 2]} print(dic) print("6" in dic) 為什麼出來是False? --- 因為用那個方式產生出來的 key 其實是數字。 你改成 print(6 in dic) 就會是 True 嘍 ~~~~ ``` ``` 若 我想知道 "蟲" 是不是在 dic 的 『值』裡面,要如何操作? 寫個for? 把所有 dic的值 全部遍歷一遍 去判斷?? --- 確實是用迴圈哦。如果是 KEY 的話才能很快的判斷  ~~~~ ``` ``` 老師您好想請教您 15:22那邊我想用print同時呼叫出apple 與bug的value,我該下麽指令讓他一次跑出兩個 蘋果及蟲蟲。 謝謝老師。 --- print(dic["apple"], dic["bug"]) ``` ``` 老師您好,想請教您最後一個部分 dic={x:x*2 for x in [3,4,5]} # 從列表的資料中產生字典 print(dic) 想請教有沒有辦法可以只print x*2的值, 像是前面那種 dic={"apple":"蘋果","bug":"蟲蟲"} print(dic["apple"])直接輸出為蘋果的那種 --- 可以呦,就打 dic[3] 或 dic[4] 或 dic[5] 就可以了,例如: dic={x:x*2 for x in [3,4,5]} print(dic[3]) print(dic[4]) print(dic[5]) ``` ``` 請問老師能用兩個不同的列表產生字典嗎 像是dic={x:y } 如果可以的話要怎麼設定y列表? --- 試試看這個範例: keys=["a","b","c"] values=[1, 2, 3] dictionary=dict(zip(keys, values)) print(dictionary) ``` ``` s3=s1&s2 交集 s3=s1|s2聯集 s3=s1-s2差集 s3=s1^s2反交集 s=set("Hello") #set(字串) 拆解字串,成為集合 字典:dic={"key":"value"} Del doc["key"]刪除鍵值對 Dic={x=x**2 for x in [2,3,4]}從列表產生字典 ``` ``` s1={3,4,8,10,12,15,20} s2={3,4,5,6,9,10,15} s3=s1&s2 print(s3) 結果會變成{10, 3, 4, 15} 請問為什麼10會變前面 怎麼試都一樣@@ 請問有辦法讓它變成{3, 4,10,15}嗎? --- 集合的概念是不在乎順序的,印出來的順序也不代表未來運算的任何意義,所以不會有任何方法可以控制順序。如果在乎順序,要使用列表來處理嘍 ~ ``` ``` 老師好,非常謝謝老師用心的教學,有一個問題想要請教: 集合要用大括號,例如s1={3,4,5} 那為什麼在s=set("Hello")時,是用小括號呢? 是因為後面接的是字串而非數字嗎?還是說使用了set 就可以用小括號? 謝謝老師! --- 使用了 set 後面就是小括號,因為 set 其實是內建的函式幫我們產生集合,那是一個函式呼叫,繼續往後學習會看到關於函式的部份哦 ~~ ``` ``` 想請問一個差集的問題 我試著不用s1-s2而是s2-s1 當 s1={3,4,5} s2={5,6,7,8} s3=s2-s1 print(s3) 為什麼會是{8,6,7}而不是{6,7,8}呢? --- 集合沒有順序的概念,所以 s2-s1 差集的意思單純只是 5 會被去掉,另外三個數字會被留下來的意思。 ``` ``` 怎麼在集合里添加或刪除資料? --- 请参考以下程式: data={3,4,5} data.remove(3) # 删除 data.add(6) # 添加 print(data) ``` ``` 這篇教了字典的建立、修改、刪除。請問有新增的語法嗎? --- 可以哦,例如: dic={"test":"測試"} dic["apple"]="蘋果" # 新增鍵值對 ``` ``` dic={x:x**2 for x in input("請輸入列表:")} print(dic) 請問老師為什麼不能這麼寫QAQ --- 因為你使用 input() 得到的輸入是一個字串,不會是列表的形式。 --- clark lai 1 年前 i=input() j=input() k=input() o=[int(i),int(j),int(k)] dic={x:x*2 for x in o} print(dic) 老師好,剛看完這個課程,然後嘗試了一下。 照上面那個,好像就可以自己輸入3個數值當一個列表,然後印出來。這樣的想法對嗎? --- 可以这样写 dic={x:x*2 for x in [int(input("请输入列表: "))]} print(dic) --- 也可以寫成這樣,供你參考。 dic={x:x*2 for x in [int(input("請輸入數字一")),int(input("請輸入數字二")),int(input("請輸入數字三"))]} print(dic) ``` ``` 老師想請問 dict1={'a':100,'b':200,'c':300} for i in dict1: print(i) 跑出來的是 a b c 而不是 100 200 300 是因為字典主要以key為主嗎?>< 還想請問 影片中說到的字串set 和 一般使用str 字串的 差別是? --- 是地,迴圈會取出字典的 key 沒錯,需要 value 的話就寫 dic1[i] 就可以了。 字串 set 是指把字串中的每個字母變成一個 set。 str() 是一個函式,用來把資料轉換成字串。 沒有太多相關性哦。 ``` ``` 如果我要換行, dic={"apple":"蘋果","bug":"蟲蟲"} print(dic["apple"]+"\n",dic["bug"]) 蘋果 蟲蟲 結果第二行印出來有空格,如何對齊? --- print(dic["apple"] , "\n"+ dic["bug"]) 逗号是有空格的 +是没有空格的 如果你要下一行没空格 应该要这样写 print(dic["apple"]+"\n"+dic["bug"]) ``` ``` 老師您好, 因我平常是做硬體的, 沒有資工背景, 是利用空閒時間自學軟體. 想請教老師, python的dictionary類似於C語言的search, list類似於C語言的陣列? 但set好像沒有索引號的概念, 是類似於C語言的指標, 指向記憶體位址取值嗎? (我想說C語言和python對應起來,應比較能記住兩者的特性.) 如果有誤或建議, 請老師不吝指導,謝謝 --- Set 我不會把他類比成 C 語言的指標,如果是純 C 語言的話,可能沒有能夠類比的東西。C++ 的話也有所謂的 Set 就比較像一點。 比較大的概念一開始或許可以類比,但慢慢的會發現有些細節是類比不起來的。我的經驗來說,最終還是要獨立看待哦 ~ ``` ``` 老師好: 想請問把字串建立成集合 再檢查某個字元是否在集合裡的這個方法 是不是可以直接寫成: print('H' in 'Hello') 那麼字串建立集合是不是有什麼更進階的用途? --- 你寫的也完全沒問題 :) 轉換成集合 (Set),主要還是看看有沒有需要對集合做後續的操作,例如新增刪除等等,使用起來會比較簡單,你可以參考以下網頁看看關於集合的更多操作方式:https://www.w3schools.com/python/python_sets.asp ``` --- # END