天天看點

Python的set集合詳解

  

  Python 還包含了一個資料類型 —— set (集合)。集合是一個無序不重複元素的集。基本功能包括關系測試和消除重複元素。集合對象還支援 union(聯合),intersection(交),difference(差)和 sysmmetric difference(對稱差集)等數學運算。

  大括号或 set() 函數可以用來建立集合。 

  set集合類需要的參數必須是疊代器類型的,如:序列、字典等,然後轉換成無序不重複的元素集。由于集合是不重複的,是以可以對字元串、清單、元組進行去重操作。

  注意:想要建立空集合,你必須使用 set() 而不是 {}。後者用于建立空字典,我們在後面介紹的一種資料結構。

 即清單,元組,字典不在是空值,舉兩個例子

  注:字典轉set集合,需要注意的是,隻取了字典的key,相當于将字典中的dict.keys()清單轉成set集合。

  集合的添加有兩種方式,分别是add和update。但是它們在添加元素時是由差別的:

add()方法

把要傳入的元素作為一個整體添加到集合中,如:

update()方法

是把要傳入的元素拆分成單個字元,存于集合中,并去掉重複的字元。可以一次添加多個值,如:

  集合的删除操作使用的方法跟清單是一樣的,使用的也是remove方法。如:

setVar.remove(element)

setVar :為一個set類型的變量

element :表示要查找并删除的元素

函數作用:

在集合setVar中查找element元素,如果存在則删除;如果沒找到,則報錯。

setVar.discard(element)

在集合setVar中查找element元素,如果存在則删除;如果沒找到,則什麼也不做。

s.pop()

s:為set類型的變量

删除并傳回set類型的s中的一個不确定的元素,如果為空引發KeyError錯誤。

s.clear()

s:set類型的變量

清空s集合中的所有元素

集合的周遊跟序列的周遊方法完全一樣。

另一種周遊方式:

  變量idex表示集合中元素i的索引。

函數

說明

len(s)

set 的長度

x in s

測試 x 是否是 s 的成員

x not in s

測試 x 是否不是 s 的成員

s.issubset(t)

測試是否 s 中的每一個元素都在 t 中

s.issuperset(t)

測試是否 t 中的每一個元素都在 s 中

s.union(t)

傳回一個新的 set 包含 s 和 t 中的每一個元素

s.intersection(t)

傳回一個新的 set 包含 s 和 t 中的公共元素

s.difference(t)

傳回一個新的 set 包含 s 中有但是 t 中沒有的元素

s.symmetric_difference(t)

傳回一個新的 set 包含 s 和 t 中不重複的元素

s.copy()

傳回 set “s”的一個淺複制

  既然是集合,那就會遵循集合的一些操作方法,如求交集、并集、差集等。

  Python中求集合的交集使用的符号是“&”,傳回連個集合的共同元素的集合,即集合的交集。

  Python中求集合的并集用的是符号“|”,傳回的是兩個集合所有的并去掉重複的元素的集合。

  Python中差集使用的符号是減号“-”。

  傳回的結果是在集合st1中但不在集合st2中的元素的集合。

  檢視兩個集合的不同之處,使用的difference函數,等價于差集。如:

  s1.difference(s3)

  這種不同指的是集合s3相對于集合s1,不同的地方,也就是所有在集合s1中,而不再集合s2中的的元素組成的新集合。

  集合可以使用大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)來判斷某個集合是否完全包含于另一個集合,也可以使用子父集判斷函數。

 定義三個集合s1,s2,s3:

大于(>)或大于等于(>=)

  表示左邊集合是否完全包含右邊集合,如集合s1是否完全包含集合s2。

小于(<)或 小于等于(<=)

  表示左邊的集合是否完全包含于右邊的集合,如集合s1是否完全包含于集合s2。

等于(==)、不等于(!=)

  判斷兩個集合是否完全相同。

  Python中還有一種不可改變的集合,那就是frozenset,不像set集合,可以增加删除集合中的元素,該集合中的内容是不可改變的,類似于字元串、元組。

  如果試圖改變不可變集合中的元素,就會報AttributeError錯誤。

  不可變集合,除了内容不能更改外,其他功能及操作跟可變集合set一樣。