Python基礎(chǔ)手冊14——集合

一、集合

這表示無序的滩愁,有限的躯喇,不重復(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)建可變集合和不可變集合滔以。

不管如何創(chuàng)建集合捉腥,Python都是用常量格式 {1, 2你画, 3}(對于可變集合來說)來顯示它抵碟,要創(chuàng)建空的集合或從已有的可迭代對象構(gòu)建集合,還是需要內(nèi)置的set()函數(shù)(直接使用空的花括號默認(rèn)創(chuàng)建的是空字典)但是使用花括號操作符創(chuàng)建集合便于初始化具有已知結(jié)構(gòu)的集合撬即。


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 —— 包

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庵佣,一起剝皮案震驚了整個濱河市歉胶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巴粪,老刑警劉巖通今,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肛根,居然都是意外死亡辫塌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門派哲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臼氨,“玉大人,你說我怎么就攤上這事芭届〈⒕兀” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵褂乍,是天一觀的道長持隧。 經(jīng)常有香客問我,道長树叽,這世上最難降的妖魔是什么舆蝴? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮题诵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘层皱。我一直安慰自己性锭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布叫胖。 她就那樣靜靜地躺著草冈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怎棱,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天哩俭,我揣著相機與錄音,去河邊找鬼拳恋。 笑死凡资,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谬运。 我是一名探鬼主播隙赁,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梆暖!你這毒婦竟也來了伞访?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤轰驳,失蹤者是張志新(化名)和其女友劉穎厚掷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體级解,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡冒黑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蠕趁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薛闪。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俺陋,靈堂內(nèi)的尸體忽然破棺而出豁延,到底是詐尸還是另有隱情,我是刑警寧澤腊状,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布诱咏,位于F島的核電站,受9級特大地震影響缴挖,放射性物質(zhì)發(fā)生泄漏袋狞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一映屋、第九天 我趴在偏房一處隱蔽的房頂上張望苟鸯。 院中可真熱鬧,春花似錦棚点、人聲如沸早处。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砌梆。三九已至默责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咸包,已是汗流浹背桃序。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烂瘫,地道東北人媒熊。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像忱反,于是被迫代替她去往敵國和親泛释。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容