03.06 Python學習入門(12)—集合

(本號正在連續推出以Python官網文檔為主線的系統學習Python的系列文章或視頻,感興趣的朋友們歡迎搜索關注。在這裡學習Python事半功倍!本文及後續文章如無特別聲明均以Windows平臺作為演示平臺,Python版本為:3.8.1)


Python的集合表示的是無序的、有限的、唯一的、不可變的、可哈希的對象的集合。集合中的元素不能被任何下標索引,但可以被迭代,並且可由內置函數len()返回集合中元素個數。集合元素遵循與字典鍵相同的不變性規則(字典類型將在後續文章中介紹)。注意,數值類型遵循數值比較的一般規則:如果兩個數字比較相等(例如1和1.0),則在一個集合中只能包含其中一個。集合的常見用途是成員資格的快速驗證,從序列中刪除重複項,以及計算數學運算,如交集、並集、差分和對稱差分。

Python內置的集合類型

  1. 可變的集合類型set 通過內置函數set()或{}定義。對象創建後直接引用的對象集合可以改變:增加或刪除元素。
  2. 不可變的集合類型 frozenset通過內置函數frozenset()定義。對象創建後直接引用的對象集合不能改變。

【注】

  1. 如果要定義集合的集合,則內部元素必須是frozenset類型。
  2. 空集合只能使用set()或frozenset()定義,而不能使用{}的形式,{}實際定義了一個空字典。

定義示例如下:

Python學習入門(12)—集合

可變和不可變集合類型都支持的操作

Python學習入門(12)—集合

【表】集合類型都支持的操作

【注】

  1. union()、intersection()、difference()和symmetric_difference()、issubset()和issuperset()方法可接受任何可迭代的參數。相反,基於運算符的對應操作要求它們的參數是集合。這就排除了set('abc')和cbs('cbs')等容易出錯的結構,支持可讀性更好的set('abc').intersection('cbs')。
  2. set和frozenset都支持集合到集合的比較。當且僅當每個集合的每個元素都包含在另一個集合中(每個元素都是另一個集合的子集),兩個集合是相等的。一個集合小於另一個集合,當且僅當第一個集合是第二個集合的一個真子集(是一個子集,但不相等)。一個集合大於另一個集合,當且僅當第一個集合是第二個集合的一個真超集(是一個超集,但不是相等的)。
  3. set實例與frozenset實例進行比較是基於其成員的。例如:set('abc')== frozenset('abc') 返回True, set('abc')中的set('abc')也返回True
  4. 子集和等式比較不能用作集合的排序函數。任何兩個非空的不相交集都是不相等的,並且不是彼此的子集,因此所有的下列語句都返回False: ab。
  5. 因為集合只定義了部分排序(子集關係),所以list.sort()方法對於集合的列表是未定義的。
  6. 集合元素,與字典鍵一樣,必須是可哈希的。
  7. 將set實例與frozenset混合的二進制操作返回第一個操作數的類型。例如:frozenset('ab') | set('bc')返回一個frozenset實例。

操作示例如下:

Python學習入門(12)—集合

【示例】集合都支持的操作

僅可變集合類型支持的操作

Python學習入門(12)—集合

【表】可變集合類型支持的操作

【注】

  1. update()、intersection_update()、diffence_update()和symmetric_diffence_update()方法可接受任何可迭代的參數。
  2. remove()和discard()方法的elem參數可以是一個集合

示例如下:

Python學習入門(12)—集合

【示例】僅可變集合支持的操作

【結束】


Python學習入門(12)—集合


分享到:


相關文章: