關係測試 ,測試二組數據之前的交集、差集、聯集等關係。
接下來我們來實作看看什麼是 去重 #!/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}}
關閉