集合· Introducing python - iampennywu
文章推薦指數: 80 %
集合(set) :目錄 · 交集【使用& 或intersection()】 · 將「集合」存在「變數」內,節省打字次數 · 聯集【使用| 或union()】 · 差集【使用- 或difference()】.
Introducingpython
Introduction
Chapter1初嘗Py
Chapter2Py食材:數字、字串與變數
變數、名稱與物件
數字
字串
內建字串函式
Chapter3Py填充:串列、Tuple、字典及集合
串列
串列函式
Tuple
字典
字典函式
集合
資料結構
Chapter4Py之殼:程式結構
if、elif、else
生成式
函式引數
函式
產生器
裝飾器
命名空間與範圍
使用try與except來處理錯誤
製作你自己的例外
Chapter5Py盒子:模組、套件與程式
模組與import陳述式
套件
Python標準程式庫
Chapter6Py喔喔:物件與類別
用class來定義類別
繼承
覆寫方法
添加方法
用super來讓父系幫助你
self防衛
使用特性來取得屬性值與設定它
搞砸私用名稱
方法類型
DuckTyping
特殊方法
組合
使用類別與物件V.S.模組的時機
PoweredbyGitBook
集合
集合(set):目錄
集合(set)介紹
集合v.s.字典
使用集合的時機
集合理論
建立集合【使用set()】
建立集合
空集合
轉換其他類型【使用set()】
字串→集合(丟棄任何重複的字元)
串列→集合
Tuple→集合
字典→集合
使用in來測試值
集合【字典={鍵:{集合=一系列的值}}】
集合v.s.字典
由「集合」尋找「鍵」【使用for,in,items(),if,print()】
由「集合」尋找「鍵」,但有排除條件
結合與運算子
交集【使用&或intersection()】
將「集合」存在「變數」內,節省打字次數
聯集【使用|或union()】
差集【使用-或difference()】
以上,是最常見的集合運算子
互斥【使用^或symmetric_difference()】
子集合【使用<=或issubset()】
真子集(propersubset)【使用=或issuperset()】
真超集合【使用>】
集合(set)介紹
集合v.s.字典
集合,就像是被移除值,只留下鍵的字典
跟字典一樣,每一個鍵都必須是獨一無二
跟字典的鍵一樣,集合是無序的
使用集合的時機
使用集合的時機:只想要知道某個東西是否存在,其他都無所謂
使用字典的時機:想要將某些資訊指派給鍵來作為它的值
集合理論
聯集
交集
null或空集合:是指含有零個元素的集合
建立集合【使用set()】
建立集合
建立集合,可以使用set()函式,或是將一或多個以逗號分隔的值包在大括號裡面
集合名稱={值1,值2,值3,值4,值5}
集合名稱
{值1,值2,值3,值4,值5}
>>>even_numbers={0,2,4,6,8}
>>>even_numbers
{0,2,4,6,8}
>>>odd_numbers={1,3,5,7,9}
>>>odd_numbers
{1,3,5,7,9}
空集合
空串列:[]
空字典:{}→在Python中,字典可優先取用大括號
空集合:set()
集合名稱=set()
集合名稱
set()
>>>empty_set=set()
>>>empty_set
set()
轉換其他類型【使用set()】
可能會用串列、字串、tuple或字典來建立集合,並丟棄任何重複的值
字串→集合(丟棄任何重複的字元)
set('字元1字元2字元3字元1')
{'字元1','字元2','字元3'}
>>>set('letters')
{'s','r','e','l','t'}
串列→集合
set([字串1,字串2,字串3,字串4])
{字串1,字串2,字串3,字串4}
>>>set(['Dasher','Dancer','Prancer','Mason-Dixon'])
{'Dasher','Mason-Dixon','Dancer','Prancer'}
Tuple→集合
set((字串1,字串2,字串3,字串4))
{字串1,字串2,字串3,字串4}
>>>set(('Ummagumma','Echoes','AtomHeartMother'))
{'AtomHeartMother','Echoes','Ummagumma'}
字典→集合
set({鍵1:值1,鍵2:值2,鍵3:值3})
{鍵1,鍵2,鍵3}
>>>set({'apple':'red','orange':'orange','cherry':'red'})
{'apple','cherry','orange'}
使用in來測試值
集合【字典={鍵:{集合=一系列的值}}】
這是集合最常用到的。
建立一個「字典」,其中每個「鍵」都是一種名稱,它對應的「值」是它的材料「集合」。
字典={
鍵1(名稱1):{值1,值2},
鍵2(名稱2):{值1,值3},
鍵3(名稱3):{值1,值3,值4}
鍵4(名稱4):{值2,值5,值6}
鍵5(名稱5):{值1,值7}
}
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
值1:vodka
值2:vermouth
值3:kahlua
值4:cream
值5:rye
值6:bitters
值7:orangejuice
集合v.s.字典
集合:集合名稱={值1,值2,值3,值4}→一系列的值
字典:字典名稱={鍵1:值1,鍵2:值2,鍵3:值3}→一或多個「鍵:值」對
由「集合」尋找「鍵」【使用for,in,items(),if,print()】
forname,contentsin字典名稱.items():
if'值1'incontents:
print(name)
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>forname,contentsindrinks.items():
if'vodka'incontents:
print(name)
martini
blackrussian
whiterussian
screwdriver
由「集合」尋找「鍵」,但有排除條件
【方法一】使用for,in,items(),if,print(),not
>>>forname,contentsin字典名稱.items():
if'值1'incontentsandnot('值2'incontentsor'值4'incontents):
print(name)
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>forname,contentsindrinks.items():
if'vodka'incontentsandnot('vermouth'incontentsor'cream'incontents):
print(name)
blackrussian
screwdriver
【方法二】使用&,for,in,items(),if,print(),not
>>>forname,contentsin字典名稱.items():
if'值1'incontentsandnotcontents&{'值2','值4'}:
print(name)
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>forname,contentsindrinks.items():
if'vodka'incontentsandnotcontents&{'vermouth','cream'}:
print(name)
blackrussian
screwdriver
結合與運算子
運算子,有一些會使用特殊的標點符號,有一些會使用特殊函數,有些同時使用兩者。
交集【使用&或intersection()】
&運算子會產生一個集合,裡面存有你所比較的兩個串列內都有的項目。
如果contents裡面沒有任何那些材料,&會回傳一個空集合,它會被視為False
方法一:【使用&】
&符號來取得交集(兩組集合共有的項目)
值1:vodka
值2:vermouth
值3:kahlua
值4:cream
值5:rye
值6:bitters
值7:orangejuice
字典={
鍵1(名稱1):{值1,值2},
鍵2(名稱2):{值1,值3},
鍵3(名稱3):{值1,值3,值4}
鍵4(名稱4):{值2,值5,值6}
鍵5(名稱5):{值1,值7}
}
forname,contentsin字典名稱.items():
ifcontents&{'值2','值7'}:
print(name)
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>forname,contentsindrinks.items():
ifcontents&{'vermouth','orangejuice'}:
print(name)
martini
manhattan
screwdriver
變數1=字典名稱1['鍵1']
變數2=字典名稱2['鍵2']
變數1&變數2
{'值1','值3'}
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>bruss=drinks['blackrussian']
>>>wruss=drinks['whiterussian']
>>>bruss&wruss
{'vodka','kahlua'}
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1&集合名稱2
值2
>>>a={1,2}
>>>b={2,3}
>>>a&b
{2}
方法二:【使用intersection()】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1.intersection(集合名稱2)
值2
>>>a={1,2}
>>>b={2,3}
>>>a.intersection(b)
{2}
將「集合」存在「變數」內,節省打字次數
字典={
鍵1(名稱1):{值1,值2},
鍵2(名稱2):{值1,值3},
鍵3(名稱3):{值1,值3,值4}
鍵4(名稱4):{值2,值5,值6}
鍵5(名稱5):{值1,值7}
}
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
值1:vodka
值2:vermouth
值3:kahlua
值4:cream
值5:rye
值6:bitters
值7:orangejuice
將兩種的材料「集合」存在「變數」內,節省之後範例的打字次數
變數1=字典['鍵1']
變數2=字典['鍵2']
>>>bruss=drinks['blackrussian']
>>>wruss=drinks['whiterussian']
聯集【使用|或union()】
方法一:【使用|】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1|集合名稱2
{值1,值2,值3}
>>>a={1,2}
>>>b={2,3}
>>>a|b
{1,2,3}
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>bruss=drinks['blackrussian']
>>>wruss=drinks['whiterussian']
>>>bruss|wruss
{'vodka','cream','kahlua'}
方法二:【使用union()】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1.union(集合名稱2)
{值1,值2,值3}
>>>a={1,2}
>>>b={2,3}
>>>a.union(b)
{1,2,3}
差集【使用-或difference()】
取得方式:屬於第一個集合,但不屬於第二個集合的成員
方法一:【使用-】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1-集合名稱2
{值1}
>>>a={1,2}
>>>b={2,3}
>>>a-b
{1}
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>bruss=drinks['blackrussian']
>>>wruss=drinks['whiterussian']
>>>bruss-wruss
set()
>>>wruss-bruss
{'cream'}
>>>
方法二:【使用difference()】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1.difference(集合名稱2)
{值1}
>>>a={1,2}
>>>b={2,3}
>>>a.difference(b)
{1}
以上,是最常見的集合運算子
到目前為止,最常見的集合運算子是「聯集」、「交集」、「差集」。
為了完整起見,接下來會討論其他的集合運算子,但可能永遠都不會用到它們
互斥【使用^或symmetric_difference()】
互斥或只屬於其中一個集合的項目
方法一:【使用^】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1^集合名稱2
{值1,值3}
>>>a={1,2}
>>>b={2,3}
>>>a^b
{1,3}
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>bruss=drinks['blackrussian']
>>>wruss=drinks['whiterussian']
>>>bruss^wruss
{'cream'}
方法二:【使用symmetric_difference()】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1.symmetric_difference(集合名稱2)
{值1,值3}
>>>a={1,2}
>>>b={2,3}
>>>a.symmetric_difference(b)
{1,3}
子集合【使用<=或issubset()】
可以用<=或issubset()來檢查「某個集合」是否為「另一個集合」的子集合(第一個集合的「所有成員」都屬於第二個集合)
方法一:【使用<=】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1<=集合名稱2
False
>>>a={1,2}
>>>b={2,3}
>>>a<=b
False
>>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>bruss=drinks['blackrussian']
>>>wruss=drinks['whiterussian']
>>>bruss<=wruss
True
方法二:【使用issubset()】
集合名稱1={值1,值2}
集合名稱2={值3,值2}
集合名稱1.issubset(集合名稱2)
False
>>>a={1,2}
>>>b={2,3}
>>>a.issubset(b)
False
方法三:子集合—「所有的集合」都是「它自己」的子集合
集合名稱1={值1,值2}
集合名稱1<=集合名稱1
集合名稱1.issubset(集合名稱1)
True
>>>a={1,2}
>>>b={2,3}
>>>a<=a
True
>>>a.issubset(a)
True
真子集(propersubset)【使用>>a={1,2}
>>>b={2,3}
>>>a>>a>>drinks={
'martini':{'vodka','vermouth'},
'blackrussian':{'vodka','kahlua'},
'whiterussian':{'vodka','kahlua','cream'},
'manhattan':{'vermouth','rye','bitters'},
'screwdriver':{'vodka','orangejuice'}
}
>>>bruss=drinks['blackrussian']
>>>wruss=drinks['whiterussian']
>>>bruss
延伸文章資訊
- 1Python 集合Set 使用方法教學與範例 - Office 指南
建立集合 · 增加、刪除元素 · 判斷元素是否存在 · 元素個數 · 判斷子集合、超集合 · 計算交集、聯集、差集 · 清空集合 · 刪除列表重複元素.
- 2Day18 Python 基礎- 集合的使用 - iT 邦幫忙
關係測試 ,測試二組數據之前的交集、差集、聯集等關係。 接下來我們來實作看看什麼是 去重 #!/usr/bin/env python3 # -*- coding:utf ...
- 3Python 3.1 快速導覽- 集合的union() - 程式語言教學誌
Python 3.1 快速導覽- 集合的union(). 集合(set) 與原封集合(frozenset) 型態(type) 的union() 方法(method) ,取得s1 與s2 的聯集 ...
- 4Python Two List Union, Intersect, Unique 兩個陣列的聯集,交集 ...
Python Two List Union, Intersect, Unique 兩個陣列的聯集,交集,取唯一值 假設 list1=[0,1,2,0,1,2,3,4,5,6,7,8,9] lis...
- 5Python Set union() 方法 - 菜鸟教程
Python Set union() 方法Python 集合描述union() 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。 语法union() 方法语法: set....