Python基礎手冊14——集合

一、集合

這表示無序的,有限的,不重復的對象集合。因為是無序的,所以它們不能被任何下標索引。一個集合的行為很像一個無值的字典的鍵,但是它還支持額外的操作。集合只能包含不可變的對象類型,列表和字典以及可變集合不能嵌入到集合中。

和其他容器類型一樣,集合支持用 in 和 not in 操作符檢查成員,由 len() 內建函數得到集合的基數(大小),用 for 循環迭代集合的成員。但是因為集合本身是無序的,你不可以為集合創建索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值。

集合(sets)有兩種不同的類型,可變集合(set) 和 不可變集合(frozenset)。如你所想,對可變集合(set),你可以添加和刪除元素,對不可變集合(frozenset)則不允許這樣做。請注意,可變集合(set)不是可哈希的,因此既不能用做字典的鍵也不能做其他集合中的元素。不可變集合(frozenset)則正好相反,即,他們有哈希值,能被用做字典的鍵或是作為集合中的一個成員。

集合的常用用法是快速成員測試,從序列中去除重復,以及計算數學運算,例如:交集、并集、差集。

對于集合元素,相同的不變性規則適用于字典的鍵。注意,數值類型遵循正常的數值比較規則:如果兩個數字相等(例如,1和1.0),其中只有一個可以包含在集合中。


二、集合的基本操作

1、創建集合類型

集合與列表( [ ] )和字典( { } ) 一樣,可以使用內置函數創建也可以使用操作符來創建。我們可以使用和字典一樣的花括號({})來創建集合(可變),也可以使用向內置函數 set()frozenset() 傳遞一個序列或其他的可迭代的對象分別來創建可變集合和不可變集合。

不管如何創建集合,Python都是用常量格式 {1, 2, 3}(對于可變集合來說)來顯示它,要創建空的集合或從已有的可迭代對象構建集合,還是需要內置的set()函數(直接使用空的花括號默認創建的是空字典)但是使用花括號操作符創建集合便于初始化具有已知結構的集合。


2、訪問集合中的值

你可以遍歷查看集合成員或檢查某項元素是否是一個集合中的成員。


3、更新集合

用集合內建的方法和操作符添加和刪除集合的成員。


4、刪除集合

如果如何刪除集合本身,可以像刪除任何 Python 對象一樣,令集合超出它的作用范圍, 或調用 del() 將他們直接清除出當前的名字空間。 如果它的引用計數為零,也會被標記以便被垃圾回收。



二、集合類型操作符


1、成員關系 (in, not in)

Python 中的 in 和 not in 操作符決定某個元素是否是一個集合中的成員。


2、集合等價/不等價

等價/不等價被用于在相同或不同的集合之間做比較。兩個集合相等是指,對每個集合而言,兩個集合中的成員完全相同。集合等價/不等價與集合的類型或集合成員的順序無關,只與集合的元素有關。


3、子集/超集

Sets 用 Python 的比較操作符檢查某集合是否是其他集合的超集或子集。“小于”符號( <, <= )用來判斷子集,“大于”符號( >, >= )用來判斷超集。

“小于” 和 “大于”意味著兩個集合在比較時不能相等。等于號允許非嚴格定義的子集和超集。

Sets 支持嚴格( < )子集和非嚴格 ( <= ) 子集,也支持嚴格( > )超集和非嚴格 ( >= )超集。只有當第一個集合是第二個集合的嚴格子集時,我們才稱第一個集合“小于”第二個集合,同理,只有當第一個集合是第二個集合的嚴格超集時,我們才稱第一個集合“大于”第二個集合。


4、聯合( | )

聯合(union)操作和集合的 OR(又稱可兼析取(inclusive disjunction))其實是等價的,兩個集合的聯合是一個新集合,該集合中的每個元素都至少是其中一個集合的成員,即,屬于兩個集合其中之一的成員。聯合符號有一個等價的方法,union()。


5、交集( & )

你可以把交集操作比做集合的 AND(或合取)操作。兩個集合的交集是一個新集合,該集合中的每個元素同時是兩個集合中的成員,即,屬于兩個集合的成員。交集符號有一個等價的方法,intersection()。


6、差補/相對補集( – )

兩個集合(s 和 t)的差補或相對補集是指一個集合 C,該集合中的元素,只屬于集合 s,而不屬于集合 t。差符號有一個等價的方法,difference()。


7、對稱差分( ^ )

和其他的布爾集合操作相似, 對稱差分是集合的 XOR(又稱”異或“ (exclusive disjunction))。兩個集合(s 和 t)的對稱差分是指另外一個集合 C,該集合中的元素,只能是屬于集合 s 或者集合 t的成員,不能同時屬于兩個集合。對稱差分有一個等價的方法,symmetric_difference()。


8、聯合操作符(僅適用于可變集合)

(Union) Update ( |= )

這個更新方法從已存在的集合中添加(可能多個)成員,此方法和 update()等價。

保留/交集更新( &= )

保留(或交集更新)操作保留與其他集合的共有成員。此方法和 intersection_update()等價。

差更新 ( –= )

對集合 s 和 t 進行差更新操作 s-=t,差更新操作會返回一個集合,該集合中的成員是集合 s 去除掉集合 t 中元素后剩余的元素。此方法和 difference_update()等價。

對稱差分更新( ^= )

對集合 s 和 t 進行對稱差分更新操作(s^=t),對稱差分更新操作會返回一個集合,該集合中的成員僅是原集合 s 或僅是另一集合 t 中的成員。此方法和 symmetric_difference_update()等價。




三、集合可用的內建函數

1、len()

把集合作為參數傳遞給內建函數 len(),返回集合的基數(或元素的個數)。


2、set() and frozenset()

set() 和 frozenset() 工廠函數分別用來生成可變和不可變的集合。如果不提供任何參數,默認會生成空集合。如果提供一個參數,則該參數必須是可迭代的,即,一個序列,或迭代器,或支持迭代的一個對象,例如:一個文件或一個字典。


《Python基礎手冊》系列:

Python基礎手冊 1 —— Python語言介紹
Python基礎手冊 2 —— Python 環境搭建(Linux)
Python基礎手冊 3 —— Python解釋器
Python基礎手冊 4 —— 文本結構
Python基礎手冊 5 —— 標識符和關鍵字
Python基礎手冊 6 —— 操作符
Python基礎手冊 7 —— 內建函數
Python基礎手冊 8 —— Python對象
Python基礎手冊 9 —— 數字類型
Python基礎手冊10 —— 序列(字符串)
Python基礎手冊11 —— 序列(元組&列表)
Python基礎手冊12 —— 序列(類型操作)
Python基礎手冊13 —— 映射(字典)
Python基礎手冊14 —— 集合
Python基礎手冊15 —— 解析
Python基礎手冊16 —— 文件
Python基礎手冊17 —— 簡單語句
Python基礎手冊18 —— 復合語句(流程控制語句)
Python基礎手冊19 —— 迭代器
Python基礎手冊20 —— 生成器
Python基礎手冊21 —— 函數的定義
Python基礎手冊22 —— 函數的參數
Python基礎手冊23 —— 函數的調用
Python基礎手冊24 —— 函數中變量的作用域
Python基礎手冊25 —— 裝飾器
Python基礎手冊26 —— 錯誤 & 異常
Python基礎手冊27 —— 模塊
Python基礎手冊28 —— 模塊的高級概念
Python基礎手冊29 —— 包

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容