Python資料類型-集合(set)

來源:互聯網
上載者:User

標籤:概念   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)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.