(本號正在連續推出以Python官網文檔為主線的系統學習Python的系列文章或視頻,感興趣的朋友們歡迎搜索關注。在這裡學習Python事半功倍!本文及後續文章如無特別聲明均以Windows平臺作為演示平臺,Python版本為:3.8.1)
Python的集合表示的是無序的、有限的、唯一的、不可變的、可哈希的對象的集合。集合中的元素不能被任何下標索引,但可以被迭代,並且可由內置函數len()返回集合中元素個數。集合元素遵循與字典鍵相同的不變性規則(字典類型將在後續文章中介紹)。注意,數值類型遵循數值比較的一般規則:如果兩個數字比較相等(例如1和1.0),則在一個集合中只能包含其中一個。集合的常見用途是成員資格的快速驗證,從序列中刪除重複項,以及計算數學運算,如交集、並集、差分和對稱差分。
Python內置的集合類型
- 可變的集合類型set 通過內置函數set()或{}定義。對象創建後直接引用的對象集合可以改變:增加或刪除元素。
- 不可變的集合類型 frozenset通過內置函數frozenset()定義。對象創建後直接引用的對象集合不能改變。
【注】
- 如果要定義集合的集合,則內部元素必須是frozenset類型。
- 空集合只能使用set()或frozenset()定義,而不能使用{}的形式,{}實際定義了一個空字典。
定義示例如下:
可變和不可變集合類型都支持的操作
【注】
- union()、intersection()、difference()和symmetric_difference()、issubset()和issuperset()方法可接受任何可迭代的參數。相反,基於運算符的對應操作要求它們的參數是集合。這就排除了set('abc')和cbs('cbs')等容易出錯的結構,支持可讀性更好的set('abc').intersection('cbs')。
- set和frozenset都支持集合到集合的比較。當且僅當每個集合的每個元素都包含在另一個集合中(每個元素都是另一個集合的子集),兩個集合是相等的。一個集合小於另一個集合,當且僅當第一個集合是第二個集合的一個真子集(是一個子集,但不相等)。一個集合大於另一個集合,當且僅當第一個集合是第二個集合的一個真超集(是一個超集,但不是相等的)。
- set實例與frozenset實例進行比較是基於其成員的。例如:set('abc')== frozenset('abc') 返回True, set('abc')中的set('abc')也返回True
- 子集和等式比較不能用作集合的排序函數。任何兩個非空的不相交集都是不相等的,並且不是彼此的子集,因此所有的下列語句都返回False: ab。
- 因為集合只定義了部分排序(子集關係),所以list.sort()方法對於集合的列表是未定義的。
- 集合元素,與字典鍵一樣,必須是可哈希的。
- 將set實例與frozenset混合的二進制操作返回第一個操作數的類型。例如:frozenset('ab') | set('bc')返回一個frozenset實例。
操作示例如下:
僅可變集合類型支持的操作
【注】
- update()、intersection_update()、diffence_update()和symmetric_diffence_update()方法可接受任何可迭代的參數。
- remove()和discard()方法的elem參數可以是一個集合
示例如下:
【結束】
閱讀更多 科技灣區 的文章