標籤:概念 width 一個 har 其他 pop add pychar img
1、建立集合
集合的建立不同於前兩種資料結構。
集合通過set(iterable)方法建立,參數iterable為可迭代對象。
範例程式碼:
s1 = set(‘好好學習天天想上‘) # 將字串分解為單個字元,作為集合的元素建立集合s2 = set((‘好好‘, ‘學習‘, ‘天天‘, ‘想上‘)) # 將元組分解為單個元素,作為集合元素建立集合s3 = set([‘好好‘, ‘學習‘, ‘天天‘, ‘想上‘]) # 將列表分解為單個元素,作為集合元素建立集合print (s1) # 顯示輸出結果為:{‘好‘, ‘習‘, ‘上‘, ‘天‘, ‘想‘, ‘學‘}print (s2) # 顯示輸出結果為:{‘好好‘, ‘想上‘, ‘學習‘, ‘天天‘}print (s3) # 顯示輸出結果為:{‘好好‘, ‘想上‘, ‘學習‘, ‘天天‘}
通過上方樣本,大家能夠看出:
- 集合可以通過可迭代對象(字串、元組、列表等)進行建立;
- 集合中的元素不可重複;
- 集合中的元素無序排列。
2、添加元素
集合添加元素的方法有兩種。
添加單個元素:使用add(element)函數,參數element為集合允許添加的元素(例如數字、字串、元組等)。
添加多個元素:使用update(iterable)函數,參數iterable為可迭代對象。
範例程式碼:
# 建立集合s1 = set(‘123‘)s2 = set(‘123‘)s3 = set(‘abc‘)# 添加單個元素s1.add(‘4‘)# 添加多個元素s2.update([‘4‘,‘5‘,‘6‘]) # 添加列表到集合,列表元素會被分解為單個元素後添加到集合s3.update(‘de‘) # 添加字串到集合,字串會被分解為單個元素後添加到集合# 顯示輸出print (s1) # 顯示輸出結果為:{‘4‘, ‘3‘, ‘1‘, ‘2‘}print (s2) # 顯示輸出結果為:{‘4‘, ‘2‘, ‘6‘, ‘5‘, ‘3‘, ‘1‘}print (s3) # 顯示輸出結果為:{‘c‘, ‘b‘, ‘d‘, ‘e‘, ‘a‘}#注意:因為集合元素是無序的,大家在測試以上代碼時,顯示輸出的結果與上方結果,可能在順序上不一致。
3、刪除元素
集合刪除元素的方法有兩種。
第一種:使用remove(element)方法刪除指定元素,參數element為需要刪除的元素。
第二種:使用discard(element)方法刪除指定元素,參數element為需要刪除的元素。
範例程式碼:
# 建立集合s1 = set([‘Python‘,‘Java‘,‘C‘,‘C++‘,‘C#‘])s2 = set([‘Python‘,‘Java‘,‘C‘,‘C++‘,‘C#‘])# 刪除元素s1.remove(‘C++‘)s2.discard(‘C++‘)# 顯示輸出print (s1) # 顯示輸出結果為:{‘C‘, ‘Python‘, ‘Java‘, ‘C#‘}print (s2) # 顯示輸出結果為:{‘C‘, ‘Python‘, ‘Java‘, ‘C#‘}
從上方樣本中,大家能夠看到remove()和discard()的作用是一樣的。
不過,這兩個方法是有區別的。
當集合中不存在這兩個方法參數中填入的元素時,remove()方法會拋出異常,而discard()方法則沒有任何影響。
4、取出元素
集合支援pop()方法取出元素。
範例程式碼:
# 建立集合s = set([‘Python‘,‘Java‘,‘C‘,‘C++‘,‘C#‘])# 顯示輸出print (s) # 顯示輸出結果為:{‘Python‘, ‘C#‘, ‘C++‘, ‘Java‘, ‘C‘}print (s.pop()) # 取出集合元素,顯示輸出結果為:Pythonprint (s) # 顯示輸出結果為:{‘C#‘, ‘C++‘, ‘Java‘, ‘C‘}
5、清空集合
集合支援clear()方法進行清空。
範例程式碼:
# 建立集合s = set([‘Python‘,‘Java‘,‘C‘,‘C++‘,‘C#‘])# 清空集合s.clear() # 顯示輸出print (s) # 顯示輸出結果為:set()
6、交集/並集/補集/差集
首先我們來看張圖,理解交集、並集、補集、差集的概念。
假設有集合A{1,2,3}和B{3,4,5}。
交集:A和B中相同部分的內容,{3}。
並集:A和B去重後的全部內容,{1,2,3,4,5}。
補集:A去除與B相交部分後的內容,{1,2}。
差集:A和B不相交部分的全部內容,{1,2,4,5}。
範例程式碼:
# 建立集合s1 = set(‘Python‘)s2 = set(‘PyCharm‘)# 交集操作:擷取兩個集合中共有元素。print (s1 & s2) # 顯示輸出結果為:{‘y‘, ‘P‘, ‘h‘}print (s1.intersection(s2)) # 顯示輸出結果為:{‘y‘, ‘P‘, ‘h‘}# 並集操作:擷取兩個集合去除重複元素後的全部元素。print (s1 | s2) # 顯示輸出結果為:{‘y‘, ‘a‘, ‘C‘, ‘o‘, ‘P‘, ‘n‘, ‘t‘, ‘m‘, ‘r‘, ‘h‘}print (s1.union(s2)) # 顯示輸出結果為:{‘y‘, ‘a‘, ‘C‘, ‘o‘, ‘P‘, ‘n‘, ‘t‘, ‘m‘, ‘r‘, ‘h‘}# 補集操作:擷取當前集合去除與另一集合交集元素後的全部元素。print (s1 - s2) # 顯示輸出結果為:{‘o‘, ‘t‘, ‘n‘}print (s1.difference(s2)) # 顯示輸出結果為:{‘o‘, ‘t‘, ‘n‘}print (s2 - s1) # 顯示輸出結果為:{‘m‘, ‘a‘, ‘r‘, ‘C‘}print (s2.difference(s1)) # 顯示輸出結果為:{‘m‘, ‘a‘, ‘r‘, ‘C‘}# 差集操作:擷取兩個集合去除交集元素後的全部元素。print (s1 ^ s2) # 顯示輸出結果為:{‘o‘, ‘t‘, ‘m‘, ‘a‘, ‘r‘, ‘n‘, ‘C‘}print (s1.symmetric_difference(s2)) # 顯示輸出結果為:{‘o‘, ‘t‘, ‘m‘, ‘a‘, ‘r‘, ‘n‘, ‘C‘}
以上操作中,對集合本身內容並無影響,大家可以在執行以上代碼後,繼續顯示輸出s1和s2的內容,能夠看到沒有任何變化。
接下來,我們再來看幾個方法,這些方法會改變集合內容。
第一種:difference_update(set) 函數,能夠將當前集合和指定集合進行補集運算,並將當前集合內容更新為運算結果。
範例程式碼:
s1=set(‘1234‘)s2=set(‘456‘)s1.difference(s2) # 該操作對s1內容無影響print (s1) # s1無變化,顯示輸出結果為:{‘3‘, ‘4‘, ‘2‘, ‘1‘}s1.difference_update(s2) # 更新集合s1的內容為s1-s2後的結果print (s1) # s1內容被更新,顯示輸出結果為:{‘3‘, ‘2‘, ‘1‘}
第二種:intersection_update(set) 函數,能夠將當前集合和指定集合進行交集運算,並將當前集合內容更新為運算結果。
範例程式碼:
s1=set(‘1234‘)s2=set(‘456‘)s1.intersection_update(s2) # 更新集合s1的內容為s1 & s2後的結果print (s1) # s1內容被更新,顯示輸出結果為:{‘4‘}
第三種:symmetric_difference_update(set) 函數,能夠將當前集合和指定集合進行差集運算,並將當前集合內容更新為運算結果。
範例程式碼:
s1 = set(‘1234‘)s2 = set(‘456‘)s1.symmetric_difference_update(s2) # 更新集合s1的內容為s1 ^ s2後的結果print(s1) # s1內容被更新,顯示輸出結果為:{‘6‘, ‘3‘, ‘2‘, ‘5‘, ‘1‘}
7、成員關係
Python中提供了一些方法,讓我們能夠判斷一個集合中是否包含某一元素;
也可以判斷一個集合是否另一個集合的子集或超集。
還可以判斷一個集合與另一個集合是否沒有交集。
在之前我們接觸過“in”這操作符,可以用來判斷操作符前方的值是否被後方的序列包含(成員關係)。
另外,我們還可以使用“not in”,判斷操作符前方的值是否未被後方的序列包含(非成員關係)。
在集合中,我們同樣可以使用這兩個操作符。
另外,我們還可以通過以下方法,判斷一個集合是否另外一個集合的子集或超集以及沒有交集。
isdisjoint(set):可以判斷集合是否與指定集合不存在交集,參數set為集合;如果成立返回結果為True,否則為False。
issubset(set):可以判斷集合是否指定集合的子集,參數set為集合;如果成立返回結果為True,否則為False。
issuperset(set):可以判斷集合是否指定集合的超集,參數set為集合;如果成立返回結果為True,否則為False。
範例程式碼:
s1 = set(‘好好學習‘)s2 = set(‘天天想上‘)s3 = set(‘好好學習天天想上‘)print (‘好‘ in s1) # 顯示輸出結果為:Trueprint (‘好‘ not in s2) # 顯示輸出結果為:Trueprint (s1.isdisjoint(s2)) # 顯示輸出結果為:Trueprint (s1.issubset(s3)) # 顯示輸出結果為:Trueprint (s3.issuperset(s1)) # 顯示輸出結果為:True
8、複製集合
使用copy()方法能夠對集合進行複製。
大家通過下方代碼即可理解複製的用途。
範例程式碼:
a = set(‘小樓一夜聽春語‘) # 建立集合存入變數ab = a # 建立變數b引用變數a的集合c = a.copy() # 建立變數c複製變數a的值print (a) # 顯示輸出結果為:{‘春‘, ‘夜‘, ‘樓‘, ‘聽‘, ‘語‘, ‘小‘, ‘一‘}print (b) # 顯示輸出結果為:{‘春‘, ‘夜‘, ‘樓‘, ‘聽‘, ‘語‘, ‘小‘, ‘一‘}print (c) # 顯示輸出結果為:{‘春‘, ‘夜‘, ‘樓‘, ‘聽‘, ‘語‘, ‘小‘, ‘一‘}a.remove(‘一‘) # 刪除變數a中集合的一個元素print (a) # 變數a發生改變,顯示輸出結果為:{‘春‘, ‘夜‘, ‘樓‘, ‘聽‘, ‘語‘, ‘小‘}print (b) # 變數b因為引用變數a,同樣發生改變,顯示輸出結果為:{‘春‘, ‘夜‘, ‘樓‘, ‘聽‘, ‘語‘, ‘小‘}print (c) # 變數c沒有改變,顯示輸出結果為:{‘春‘, ‘夜‘, ‘樓‘, ‘聽‘, ‘語‘, ‘小‘, ‘一‘}
如果還不能夠理解,我們可以看下面這張圖。
代碼中,b = a實際上是將b指向了a的內容,所以當a的內容發生變化時,b同步發生了變化。
而c = a.copy()則是將a的內容真正進行了複製,不再受a的變化影響。
9、其他
集合也支援len()方法進行元素數量的擷取,也支援max()方法和min方法擷取集合中的最大元素與最小元素,在此不再贅述
Python資料類型-集合(set)