Day18 Python 基礎- 集合的使用 - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

關係測試 ,測試二組數據之前的交集、差集、聯集等關係。

接下來我們來實作看看什麼是 去重 #!/usr/bin/env python3 # -*- coding:utf ... 2017iT邦幫忙鐵人賽 DAY 18 0 自我挑戰組 Python學習筆記系列第 18篇 Day18Python基礎-集合的使用 2017鐵人賽 python3 我好弱 2016-12-1821:21:106518瀏覽 集合是一個無序的,不重複的數據組合,主要的作用如下 去重,把一個列表變成集合,就會自動去重了。

關係測試,測試二組數據之前的交集、差集、聯集等關係。

接下來我們來實作看看什麼是去重 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) print(list_1,type(list_1)) ---------------執行結果--------------- {1,3,4,5,6,7,9} Processfinishedwithexitcode0 觀察一下,發現原本有重複出現的數字已經不見了,而且這個列表也已經變成一個集合了 接下來我們來試試關係測試 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) print(list_1,list_2) ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22} Processfinishedwithexitcode0 觀察上面代碼,這二個集合中,有沒有二個一樣的數字?那如何將這二個一樣的數字給取出來呢? #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) print(list_1,list_2) print(list_1.intersection(list_2))#交集 ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22} {4,6} Processfinishedwithexitcode0 唔…成功取出來了,{4,6}就是這二個集合的交集,所謂交集就是二個集合裡面都有的東西,A和B的交集寫作A∩B 如果做二個集合的聯集要怎麼取呢? #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) print(list_1,list_2) print(list_1.union(list_2))#聯集 ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22} {0,1,2,3,4,5,6,7,66,9,8,22} Processfinishedwithexitcode0 唔…在觀察一下,發現這二個集合被合併成一個集合了,並且也做了去重,這個就叫做聯集, A和B的聯集通常寫作A∪B 如果做二個集合的差集要怎麼取呢? #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) print(list_1,list_2) print(list_1.difference(list_2))#差集inlist_1butnotinlist_2 ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22} {1,3,5,9,7} Processfinishedwithexitcode0 觀察一下,可以想像成把list_1這個集合減去list_1跟list_2的交集,就會是list_1的差集了,那…list_2的差集會是長什麼樣子呢? #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) print(list_1,list_2) print(list_1.difference(list_2))#差集inlist_1butnotinlist_2 print(list_2.difference(list_1)) ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22} {1,3,5,9,7} {0,8,2,66,22} Processfinishedwithexitcode0 唔…在仔細觀察一下,list_2的差集有什麼不同!是不是也發現{4,6}這二個數字也不見了,只保留了{0,8,2,66,22} 除了這三個之外,還有沒有別的關係?是有的 接下來我們來試試子集 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) print(list_1,list_2) print(list_1.issubset(list_2))#子集 ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22} False Processfinishedwithexitcode0 咦,出現False,為什麼會出現false呢? 是因為list_1這個集合裡的數字,沒有完全符合list_2這個集合裡的數字,所以才會是False,那有子集就會有父集,那就來試試看list_2是不是list_1的父集? #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) print(list_1,list_2) print(list_1.issubset(list_2))#子集 print(list_2.issuperset(list_1))#父集 ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22} False False Processfinishedwithexitcode0 接下來我們來新增一個集合list_3,再試試剛剛那個子集跟父集,觀察一下,有什麼不同? #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) list_3=set([1,3,7]) print(list_1,list_2,list_3) print(list_3.issubset(list_1))#子集 print(list_1.issuperset(list_3))#父集 ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22}{1,3,7} True True Processfinishedwithexitcode0 唔…list_3是list_1的子集,反過來說,list_1是list_3的父集 再來試試對稱差集,觀察一下看看有什麼不同 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) list_3=set([1,3,7]) print(list_1,list_2,list_3) print(list_1.symmetric_difference(list_2)) ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22}{1,3,7} {0,1,2,66,3,5,7,8,9,22} Processfinishedwithexitcode0 唔,就是把二個集合裡所沒有的元素給取出來,所以就取出了{0,1,2,66,3,5,7,8,9,22},而{4,6}是這二個集合都有的,所以就不取了 再來我們在新增一個集合叫list_4,當二個集合沒有交集的話,要怎麼判斷? #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) list_3=set([1,3,7]) list_4=set([5,6,8]) print(list_1,list_2,list_3) print(list_3.isdisjoint(list_4)) #ReturnTrueiftwosetshaveanullintersection. ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22}{1,3,7} True Processfinishedwithexitcode0 唔,有發現結果回應True,就代表set.isdisjoint()是判斷當二個集合沒有交集時,就返回True,那我在修改一下list_4,在觀察一下 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) list_3=set([1,3,7]) list_4=set([5,6,7,8]) print(list_1,list_2,list_3) print(list_3.isdisjoint(list_4)) ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22}{1,3,7} False Processfinishedwithexitcode0 嗯!結果返回一個False,就代表list_3跟list_4是有交集的 用符號來表示交集、聯集、差集、對稱差集 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_2=set([0,2,6,66,22,8,4]) list_3=set([1,3,7]) list_4=set([5,6,7,8]) print(list_1,list_2,list_3) print(list_1&list_2)#交集(intersection) print(list_1|list_2)#聯集(Union) print(list_1-list_2)#差集(difference)inlist_1notinlist_2 print(list_1^list_2)#對稱差集(symmetric_difference) ---------------執行結果--------------- {1,3,4,5,6,7,9}{0,2,66,4,6,8,22}{1,3,7} {4,6} {0,1,2,3,4,5,6,7,66,9,8,22} {1,3,5,9,7} {0,1,2,66,3,5,7,8,9,22} Processfinishedwithexitcode0 再來我們來操作集合的新增、修改、刪除,先試試對一個集合做新增 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_1.add(44) print(list_1) ---------------執行結果--------------- {1,3,4,5,6,7,9,44} Processfinishedwithexitcode0 再來新增多個數字到集合裡 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_1.add(44) list_1.update([9527,520,1314]) print(list_1) ---------------執行結果--------------- {1,1314,3,4,5,6,7,520,9,44,9527} Processfinishedwithexitcode0 再來試試刪除的方法 Method1:set.remove()刪除元素,但刪除一個不存在的元素,會噴error #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_1.add(44) list_1.update([9527,520,1314]) list_1.remove(1314) print(list_1) ---------------執行結果--------------- {1,3,4,5,6,7,520,9,44,9527} Processfinishedwithexitcode0 Method2:set.pop()隨機任意刪,並且打印出刪除的元素 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_1.add(44) list_1.update([9527,520,1314]) list_1.remove(1314) print(list_1) print(list_1.pop()) print(list_1.pop()) print(list_1.pop()) print(list_1.pop()) print(list_1.pop()) print(list_1.pop()) print(list_1.pop()) print(list_1) ---------------執行結果--------------- {1,3,4,5,6,7,520,9,44,9527} 1 3 4 5 6 7 520 {9,44,9527} Processfinishedwithexitcode0 Method3:set.discard()如果元素存在,就刪除,元素不存在,也不會噴error #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_1.add(44) list_1.update([9527,520,1314]) list_1.remove(1314) print(list_1) list_1.discard(9) list_1.discard(999)#故意刪除一個不存在的,也不會報錯 print(list_1) ---------------執行結果--------------- {1,3,4,5,6,7,520,9,44,9527} {1,3,4,5,6,7,520,44,9527} Processfinishedwithexitcode0 計算集合的長度 #!/usr/bin/envpython3 #-*-coding:utf-8-*- list_1=[1,4,5,7,3,6,7,9] list_1=set(list_1) list_1.add(44) list_1.update([9527,520,1314]) list_1.remove(1314) print(len(list_1)) print(list_1) ---------------執行結果--------------- 10 {1,3,4,5,6,7,520,9,44,9527} Processfinishedwithexitcode0 參考資料: 交集wiki 聯集wiki 差集wiki 子集wiki 天啊,一直要想到底什麼是交集、聯集、差集,看到wiki整個就腦裂了 留言 追蹤 檢舉 上一篇 Day17Python基礎-字典進階應用-三層式地址查詢 下一篇 Day19Python基礎-文件操作 系列文 Python學習筆記 共29篇 目錄 RSS系列文 訂閱系列文 78人訂閱 25 Day25Python基礎-文件操作_V2 26 Day26Python基礎-文件操作_V2(with語句) 27 Day27Python基礎-字符轉編碼操作 28 Day28Python基礎-字符轉編碼操作_V2 29 Day28Python基礎-函數介紹 完整目錄 尚未有邦友留言 立即登入留言 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20477篇 完賽人數 572人 鐵人賽最新文章 .NetCoreWebApi_筆記21_Swagger及OpenAPI介紹與配置使用方式_API管理與測試探討 .NetCoreWebApi_筆記20_api結合ADO.NET資料庫操作part8_新聞文章查詢 .NetCoreWebApi_筆記19_api結合ADO.NET資料庫操作part7_新聞文章的編輯更新與刪除 .NetCoreWebApi_筆記18_api結合ADO.NET資料庫操作part6_新聞文章表格陳列查詢 .NetCoreWebApi_筆記17_api結合ADO.NET資料庫操作part5_新聞文章新增_新聞類別元素透過API綁定方式 [Bonus系列]-使用useCallback&useMemo的正確時機是什麼? 大盤到底能不能攻上一萬八?? gotodie?那個goto到底能不能用啊? 2021/12/12更新 予焦啦!一夢終須醒...... 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce [Day03]tinyML開發板介紹 永豐金融API測試員 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 公司想要架設一個網購物站,但是不知道要怎麼規劃預算 正要準備開始上CCNA… 無網際網路時,請問兩台電腦如何‘無線’遠端連線 遠端監控電腦效能 如何設定一台電腦,有線網卡走公司內網,無線網卡走外網,同時運行? mssql資料庫搬移時,怎樣出所有需要的資料會比較好? 請問有在做關貿資料串接的資訊公司嗎? NAS、雲端儲存空間、隨身硬碟差別在那?怎麼選? 照片辨識比對軟體開發 微軟授權疑問 IT邦幫忙 站方公告 【2021iThome鐵人賽】登登登!究竟獎落誰家,2021iThome鐵人賽得獎名單正式揭曉 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 正要準備開始上CCNA… 遠端監控電腦效能 如何設定一台電腦,有線網卡走公司內網,無線網卡走外網,同時運行? NAS、雲端儲存空間、隨身硬碟差別在那?怎麼選? 無網際網路時,請問兩台電腦如何‘無線’遠端連線 照片辨識比對軟體開發 使用ASP.NETWebForm快速開發是不是比較不會用[ASP.NET][C#]物件導向設計方式 Linux主機抓取Windows主機檔案 公司想要架設一個網購物站,但是不知道要怎麼規劃預算 mssql資料庫搬移時,怎樣出所有需要的資料會比較好? 熱門文章 [Bonus系列]-使用useCallback&useMemo的正確時機是什麼? 為了轉生而點技能-JavaScript,day23(Promise介紹 .NetCoreWebApi_筆記17_api結合ADO.NET資料庫操作part5_新聞文章新增_新聞類別元素透過API綁定方式 12.MYSQL淺談NULL 數位簽章(digitalsignature) 【徵才/台北信義區】美商全職駐點MIS工程師 D9.學習基礎C、C++語言 7.MYSQL表格程式語法 javascript變數與運算子2 javascript流程控制-判斷式1 一週點數排行 更多點數排行 海綿寶寶(antijava) 居然解出來了(partyyaya) ㊣浩瀚星空㊣(yoching) 小山丘(a243318490) raytracy(raytracy) ccenjor(ccenjor) 純真的人(jer5173) PPTaiwan(Pochengtaiwan) Gary(mosbbs) souda(souda) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?