一、集合
這表示無序的滩愁,有限的躯喇,不重復(fù)的對象集合。因為是無序的硝枉,所以它們不能被任何下標(biāo)索引廉丽。一個集合的行為很像一個無值的字典的鍵,但是它還支持額外的操作妻味。集合只能包含不可變的對象類型正压,列表和字典以及可變集合不能嵌入到集合中。
和其他容器類型一樣责球,集合支持用 in 和 not in 操作符檢查成員焦履,由 len() 內(nèi)建函數(shù)得到集合的基數(shù)(大小),用 for 循環(huán)迭代集合的成員雏逾。但是因為集合本身是無序的嘉裤,你不可以為集合創(chuàng)建索引或執(zhí)行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值栖博。
集合(sets)有兩種不同的類型屑宠,可變集合(set) 和 不可變集合(frozenset)。如你所想仇让,對可變集合(set)典奉,你可以添加和刪除元素躺翻,對不可變集合(frozenset)則不允許這樣做。請注意卫玖,可變集合(set)不是可哈希的获枝,因此既不能用做字典的鍵也不能做其他集合中的元素。不可變集合(frozenset)則正好相反骇笔,即省店,他們有哈希值,能被用做字典的鍵或是作為集合中的一個成員笨触。
集合的常用用法是快速成員測試懦傍,從序列中去除重復(fù),以及計算數(shù)學(xué)運算芦劣,例如:交集粗俱、并集、差集虚吟。
對于集合元素寸认,相同的不變性規(guī)則適用于字典的鍵。注意串慰,數(shù)值類型遵循正常的數(shù)值比較規(guī)則:如果兩個數(shù)字相等(例如偏塞,1和1.0),其中只有一個可以包含在集合中邦鲫。
二灸叼、集合的基本操作
1、創(chuàng)建集合類型
集合與列表( [ ] )和字典( { } ) 一樣庆捺,可以使用內(nèi)置函數(shù)創(chuàng)建也可以使用操作符來創(chuàng)建古今。我們可以使用和字典一樣的花括號({}
)來創(chuàng)建集合(可變),也可以使用向內(nèi)置函數(shù) set()
和 frozenset()
傳遞一個序列或其他的可迭代的對象分別來創(chuàng)建可變集合和不可變集合滔以。
2立磁、訪問集合中的值
你可以遍歷查看集合成員或檢查某項元素是否是一個集合中的成員。3剥槐、更新集合
用集合內(nèi)建的方法和操作符添加和刪除集合的成員唱歧。4、刪除集合
如果如何刪除集合本身,可以像刪除任何 Python 對象一樣颅崩,令集合超出它的作用范圍几于, 或調(diào)用 del()
將他們直接清除出當(dāng)前的名字空間。 如果它的引用計數(shù)為零沿后,也會被標(biāo)記以便被垃圾回收沿彭。
二、集合類型操作符
1尖滚、成員關(guān)系 (in, not in)
Python 中的 in 和 not in 操作符決定某個元素是否是一個集合中的成員喉刘。2、集合等價/不等價
等價/不等價被用于在相同或不同的集合之間做比較漆弄。兩個集合相等是指睦裳,對每個集合而言,兩個集合中的成員完全相同撼唾。集合等價/不等價與集合的類型或集合成員的順序無關(guān)廉邑,只與集合的元素有關(guān)。3倒谷、子集/超集
Sets 用 Python 的比較操作符檢查某集合是否是其他集合的超集或子集蛛蒙。“小于”符號( <, <= )用來判斷子集渤愁,“大于”符號( >, >= )用來判斷超集牵祟。
“小于” 和 “大于”意味著兩個集合在比較時不能相等。等于號允許非嚴(yán)格定義的子集和超集猴伶。
Sets 支持嚴(yán)格( < )子集和非嚴(yán)格 ( <= ) 子集课舍,也支持嚴(yán)格( > )超集和非嚴(yán)格 ( >= )超集。只有當(dāng)?shù)谝粋€集合是第二個集合的嚴(yán)格子集時他挎,我們才稱第一個集合“小于”第二個集合,同理捡需,只有當(dāng)?shù)谝粋€集合是第二個集合的嚴(yán)格超集時办桨,我們才稱第一個集合“大于”第二個集合。4站辉、聯(lián)合( | )
聯(lián)合(union)操作和集合的 OR(又稱可兼析取(inclusive disjunction))其實是等價的呢撞,兩個集合的聯(lián)合是一個新集合,該集合中的每個元素都至少是其中一個集合的成員饰剥,即殊霞,屬于兩個集合其中之一的成員。聯(lián)合符號有一個等價的方法汰蓉,union()绷蹲。5、交集( & )
你可以把交集操作比做集合的 AND(或合取)操作。兩個集合的交集是一個新集合祝钢,該集合中的每個元素同時是兩個集合中的成員比规,即,屬于兩個集合的成員拦英。交集符號有一個等價的方法蜒什,intersection()。6疤估、差補/相對補集( – )
兩個集合(s 和 t)的差補或相對補集是指一個集合 C灾常,該集合中的元素,只屬于集合 s铃拇,而不屬于集合 t岗憋。差符號有一個等價的方法,difference()锚贱。7仔戈、對稱差分( ^ )
和其他的布爾集合操作相似, 對稱差分是集合的 XOR(又稱”異或“ (exclusive disjunction))拧廊。兩個集合(s 和 t)的對稱差分是指另外一個集合 C监徘,該集合中的元素,只能是屬于集合 s 或者集合 t的成員吧碾,不能同時屬于兩個集合凰盔。對稱差分有一個等價的方法,symmetric_difference()倦春。8户敬、聯(lián)合操作符(僅適用于可變集合)
(Union) Update ( |= )
這個更新方法從已存在的集合中添加(可能多個)成員,此方法和 update()等價睁本。保留/交集更新( &= )
保留(或交集更新)操作保留與其他集合的共有成員尿庐。此方法和 intersection_update()等價。差更新 ( –= )
對集合 s 和 t 進行差更新操作 s-=t呢堰,差更新操作會返回一個集合抄瑟,該集合中的成員是集合 s 去除掉集合 t 中元素后剩余的元素。此方法和 difference_update()等價枉疼。對稱差分更新( ^= )
對集合 s 和 t 進行對稱差分更新操作(s^=t),對稱差分更新操作會返回一個集合皮假,該集合中的成員僅是原集合 s 或僅是另一集合 t 中的成員。此方法和 symmetric_difference_update()等價骂维。
三惹资、集合可用的內(nèi)建函數(shù)
1、len()
把集合作為參數(shù)傳遞給內(nèi)建函數(shù) len()航闺,返回集合的基數(shù)(或元素的個數(shù))褪测。2、set() and frozenset()
set() 和 frozenset() 工廠函數(shù)分別用來生成可變和不可變的集合。如果不提供任何參數(shù)汰扭,默認(rèn)會生成空集合稠肘。如果提供一個參數(shù),則該參數(shù)必須是可迭代的萝毛,即项阴,一個序列,或迭代器笆包,或支持迭代的一個對象环揽,例如:一個文件或一個字典。《Python基礎(chǔ)手冊》系列:
Python基礎(chǔ)手冊 1 —— Python語言介紹
Python基礎(chǔ)手冊 2 —— Python 環(huán)境搭建(Linux)
Python基礎(chǔ)手冊 3 —— Python解釋器
Python基礎(chǔ)手冊 4 —— 文本結(jié)構(gòu)
Python基礎(chǔ)手冊 5 —— 標(biāo)識符和關(guān)鍵字
Python基礎(chǔ)手冊 6 —— 操作符
Python基礎(chǔ)手冊 7 —— 內(nèi)建函數(shù)
Python基礎(chǔ)手冊 8 —— Python對象
Python基礎(chǔ)手冊 9 —— 數(shù)字類型
Python基礎(chǔ)手冊10 —— 序列(字符串)
Python基礎(chǔ)手冊11 —— 序列(元組&列表)
Python基礎(chǔ)手冊12 —— 序列(類型操作)
Python基礎(chǔ)手冊13 —— 映射(字典)
Python基礎(chǔ)手冊14 —— 集合
Python基礎(chǔ)手冊15 —— 解析
Python基礎(chǔ)手冊16 —— 文件
Python基礎(chǔ)手冊17 —— 簡單語句
Python基礎(chǔ)手冊18 —— 復(fù)合語句(流程控制語句)
Python基礎(chǔ)手冊19 —— 迭代器
Python基礎(chǔ)手冊20 —— 生成器
Python基礎(chǔ)手冊21 —— 函數(shù)的定義
Python基礎(chǔ)手冊22 —— 函數(shù)的參數(shù)
Python基礎(chǔ)手冊23 —— 函數(shù)的調(diào)用
Python基礎(chǔ)手冊24 —— 函數(shù)中變量的作用域
Python基礎(chǔ)手冊25 —— 裝飾器
Python基礎(chǔ)手冊26 —— 錯誤 & 異常
Python基礎(chǔ)手冊27 —— 模塊
Python基礎(chǔ)手冊28 —— 模塊的高級概念
Python基礎(chǔ)手冊29 —— 包