全面了解Python集合瓣距,17個方法全解代咸,看完就夠了

一蹈丸、集合的定義

01 定義與特性

Python中的集合類似于數(shù)學(xué)中的集合概念,它是一組無序呐芥、不可重復(fù)元素序列逻杖,集合用{value1思瘟,value2}創(chuàng)建,某種程度上可以把集合看作是沒有值的字典够话。字典是dict = {key:value,key2:value2,}需要key。特點(diǎn):1霎箍、不同元素組成 2、無序 3漂坏、集合中的元素必須是不可變類型

1)自動去重

注意媒至,集合是有不同元素組成,所以即便里面的值重復(fù)了驯绎,也會去重谋旦。


1? set1 = {1, 2, 4, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 1}
2? print(set1) # {1, 2, 3, 4}
3? len(set('1232'))# 3
4? len('1232') # 4

2)打印內(nèi)容是無序的

集合的元素是無序的,因此打印的時候册着,也是無序的


set_0 = {"小伍哥","真","是","帥"}
print(set_0) # {'帥', '小伍哥

3)集合中的元素必須是不可變類型

集合類型要求元素是獨(dú)一無二的甲捏,不能存在相同的元素,但是如果其中的某一個元素是可以被改變的司顿,它一旦改變之后可能會和其他的元素相同,這樣子的話集合類型就會出現(xiàn)錯誤大溜,所以集合類型要求化漆,該元素不能是可變數(shù)據(jù)類型

02 集合的創(chuàng)建

可以使用大括號 { } 或者 set() 函數(shù)創(chuàng)建集合钦奋,注意:創(chuàng)建一個空集合必須用 set() 而不是 { },因為 { } 是用來創(chuàng)建一個空字典疙教。

創(chuàng)建格式:

set= {value01,value02,...} 或者 set(value)


s = {'s', 'e', 't'}
s = set(['a, b, c, d, e'])
s = set('我愛我的祖國')
s # {'國', '我', '愛', '的',

集合也可以用表達(dá)式(推導(dǎo))的方式創(chuàng)建


{x * 2 for x in 'abc'}? #{'aa', 'bb', 'cc} {x **2 for x in range(1,5)}? #{1, 4, 9, 16}

創(chuàng)建空集合必須用set()


set = set()? # 創(chuàng)建空集合必須用這種方式
dict = {}? ? # 使用這種方式創(chuàng)建的

二伞租、集合的17個方法

#獲取集合的所有方法


print(dir(set()))
[..., 'add', 'clear', 'copy', 'difference', 'difference_update',
'discard', 'intersection', 'intersection_update', 'isdisjoint',
'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference',
'symmetric_difference_update', 'union', 'update']

01葵诈、add()

描述:add() 方法用于給集合添加元素祟同,如果添加的元素在集合中已存在理疙,則不執(zhí)行任何操作。注意:集合中只能包含可哈希的對象砖顷,即 list赃梧,dict 都不能嵌入到集合

語法:set.add(elmnt)

參數(shù):elmnt -- 必需,要添加的元素物咳。



#添加不存在的元素
set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set1.add('羅玉鳳')#給他加個鳳姐進(jìn)去
set1
{'Makiyo', 'Selina', '周揚(yáng)青', '徐懷鈺', '羅玉鳳'}

set1.add('喬碧蘿')#再給羅志祥加個喬碧蘿
set1
{'Makiyo', 'Selina', '喬碧蘿', '周揚(yáng)青', '徐懷鈺', '羅玉鳳'}

#添加存在的元素
set1.add('徐懷鈺')
set1
? {'Makiyo', 'Selina', '喬碧蘿', '周揚(yáng)青', '羅玉鳳'}#我們發(fā)現(xiàn)蹄皱,還是只有五個

02巷折、clear()

描述:clear() 方法用于移除集合中的所有元素。

語法:set.clear()

參數(shù):無


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set1.clear()#一下全部清除了
set1
set()#返回一個空集合

03盔几、copy()

描述:copy() 方法用于復(fù)制一個集合逊拍,會重新生成一個

語法:set.copy()

參數(shù):無


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set2 = set1.copy()#直接復(fù)制產(chǎn)生一個新的集合际邻,要多少有多少
set2
{'Makiyo', 'Selina', '周揚(yáng)青', '徐懷鈺'}

04、difference()

描述:difference() 方法用于返回集合的差集缨恒,即返回的集合元素包含在第一個集合中轮听,但不包含在第二個集合(方法的參數(shù))中。也可以用set1-set2 進(jìn)行差運(yùn)算萧锉,set1減去set1&set2部分

語法:set.difference(set)

參數(shù):set -- 必需述寡,用于計算差集的集合


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set2 = {'周揚(yáng)青','徐懷鈺','羅玉鳳','喬碧蘿'}#再建一個羅志祥的女友集合
set1.difference(set2)
{'Makiyo', 'Selina'}

05叶洞、difference_update()

描述:difference_update()方法用于移除兩個集合中都存在的元素,與difference()方法的區(qū)別在于difference() 方法返回一個移除相同元素的新集合衩辟,而difference_update()方法是直接在原來的集合中移除元素波附,沒有返回值。

語法:set.difference_update(set)

參數(shù):set -- 必需封寞,用于計算差集的集合


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set2 = {'周揚(yáng)青','徐懷鈺','羅玉鳳','喬碧蘿'}#再建一個羅志祥的女友集合
set1.difference_update(set2)#無返回值
print(set1)
{'Makiyo', 'Selina'}

08折晦、intersection()

描述:intersection() 方法用于返回兩個或更多集合中都包含的元素,即交集濒翻。set1&set2

語法:set.intersection(set1, set2 ... etc)

參數(shù):

set1 -- 必需,要查找相同元素的集合

set2 -- 可選胰锌,其他要查找相同元素的集合分别,可以多個,多個使用逗號 ,


#兩個集合取交集
set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set2 = {'周揚(yáng)青','徐懷鈺','羅玉鳳','喬碧蘿'}#再建一個羅志祥的女友集合
set1.intersection(set2)
{'周揚(yáng)青', '徐懷鈺'}
#多個集合取交集
x = {"a", "b", "c"}
y = {"c", "d", "e"}
z = {"f", "g", "c"}
result = x.intersection(y, z)
print(result)
{'c'}

09谜喊、intersection_update()

描述:intersection_update() 方法用于獲取兩個或更多集合中都重疊的元素倦始,即計算交集。intersection_update()方法不同于intersection()方法诵次,因為intersection() 方法是返回一個新的集合枚碗,而 intersection_update() 方法是在原始的集合上移除不重疊的元素。

語法:set.intersection_update(set1, set2 ... etc)

參數(shù):

set1 -- 必需遵堵,要查找相同元素的集合

set2 -- 可選酷含,其他要查找相同元素的集合,可以多個限番,多個使用逗號 , 隔開


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set2 = {'周揚(yáng)青','徐懷鈺','羅玉鳳','喬碧蘿'}#再建一個羅志祥的女友集合
set1.intersection_update(set2)
print(set1)
{'周揚(yáng)青', '徐懷鈺'}

10弥虐、isdisjoint()

描述:isdisjoint() 方法用于判斷兩個集合是否包含相同的元素,如果沒有返回True霜瘪,否則返回 False。

語法:set.isdisjoint(set)

參數(shù):set -- 必需捻撑,要比較的集合


x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "facebook"}
z = x.isdisjoint(y)
print(z)
True

11缤底、issubset()

描述:issubset() 判斷set1是否是set2的子集个唧,如果是則返回 True,否則返回 False徙歼。

語法:set.issubset(set)

參數(shù):set -- 必需魄梯,要比查找的集合

示例:


x = {"a", "b", "c"}
y = {"f", "e", "d", "c", "b", "a"}
z = x.issubset(y)
print(z)
True
x = {"a", "b", "c"}
y = {"f", "e", "d", "c", "b"}
z = x.issubset(y)
print(z)
False

12、issuperset()

描述:issuperset() 方法用于判斷指定集合的所有元素是否都包含在原始的集合中彭谁,如果是則返回 True允扇,否則返回 False则奥。

語法:set.issuperset(set)

參數(shù):set -- 必需,要比查找的集合

示例:


x = {"f", "e", "d", "c", "b", "a"}
y = {"a", "b", "c"}
z = x.issuperset(y)
print(z)
True
x = {"f", "e", "d", "c", "b"}
y = {"a", "b", "c"}
z = x.issuperset(y)
print(z)
False

13糊治、pop()

描述:pop() 方法用于隨機(jī)移除一個元素罚舱。

語法:set.pop()


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}
set1.pop()
'徐懷鈺'
set1
{'Makiyo', 'Selina', '周揚(yáng)青'}

14、remove()

描述:remove() 方法用于移除集合中的指定元素粥脚。該方法不同于discard()方法,因為 remove() 方法在移除一個不存在的元素時會發(fā)生錯誤冤留,而 discard() 方法不會树灶。

語法:set.remove(item)

參數(shù):item -- 要移除的元素


#構(gòu)建一個羅志祥歷任女友的集合
set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}
#現(xiàn)在我們拿走一個看看
set1.remove('徐懷鈺')
set1
{'Makiyo', 'Selina', '周揚(yáng)青'}#人家還剩3個天通,真是
#再拿走一個集合里面沒有的,發(fā)現(xiàn)并沒有報錯
set1.discard('女助理')
set1
{'Makiyo', 'Selina', '周揚(yáng)青'}
#用remove方法試試烘豹,發(fā)現(xiàn)就報錯了
set1.remove('女助理')
KeyError: '女助理'

15萝映、discard()

描述:discard() 方法用于移除指定的集合元素。該方法不同于 remove() 方法蚌卤,因為 remove() 方法在移除一個不存在的元素時會發(fā)生錯誤奥秆,而 discard() 方法不會。

語法:set.discard(value)

參數(shù):value -- 必需侮叮,要移除的元素


#構(gòu)建一個羅志祥歷任女友的集合
set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}
#現(xiàn)在我們拿走一個看看
set1.discard('徐懷鈺')
set1
{'Makiyo', 'Selina', '周揚(yáng)青'}#人家還剩3個悼瘾,真是
#再拿走一個集合里面沒有的,發(fā)現(xiàn)并沒有報錯
set1.discard('女助理')
set1
{'Makiyo', 'Selina', '周揚(yáng)青'}
#用remove方法試試卸勺,發(fā)現(xiàn)就報錯了
set1.remove('女助理')
KeyError: '女助理'

16烫扼、symmetric_difference()

描述:symmetric_difference() 方法返回兩個集合中不重復(fù)的元素集合,即會移除兩個集合中都存在的元素悟狱。

語法:set.symmetric_difference(set)

參數(shù):set -- 集合


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set2 = {'周揚(yáng)青','徐懷鈺','羅玉鳳','喬碧蘿'}#再建一個羅志祥的女友集合
set1.symmetric_difference(set2)
{'Makiyo', 'Selina', '喬碧蘿', '徐懷鈺', '羅玉鳳'}

17、symmetric_difference_update()

描述:symmetric_difference_update() 方法移除當(dāng)前集合中在另外一個指定集合相同的元素苹享,并將另外一個指定集合中不同的元素插入到當(dāng)前集合中挣菲。

語法:set.symmetric_difference_update(set)

參數(shù):set -- 要檢測的集合


set1 = {'周揚(yáng)青','徐懷鈺','Makiyo','Selina'}#建一個羅志祥的女友集合
set2 = {'周揚(yáng)青','徐懷鈺','羅玉鳳','喬碧蘿'}#再建一個羅志祥的女友集合
set1.symmetric_difference_update(set2)
print(set1)
{'Selina', '羅玉鳳', '喬碧蘿', 'Makiyo'}

16白胀、union()

描述:union() 取并集,效果等同于 | 哪怔,重復(fù)元素只會出現(xiàn)一次向抢,但是括號里可以是 list,tuple叉信,其他 艘希, 甚至是 dict

語法:set.union(set1, set2...)

參數(shù):

set1 -- 必需,合并的目標(biāo)集合

set2 -- 可選佳遂,其他要合并的集合撒顿,可以多個,多個使用逗號 , 隔開吩屹。


#兩個集合的并集
set1 = {'小蘋果','大桃子','長香蕉'}
set2 = {'小李子','大蘿卜','長香蕉'}
set1.union(set2)
{'大桃子', '大蘿卜', '小李子', '小蘋果', '長香蕉'}#長香蕉只出現(xiàn)一次

#三個集合并集
set3 = {'爛柿子','羅志祥'}
set1.union(set2,set3)
{'大桃子', '大蘿卜', '小李子', '小蘋果', '爛柿子', '羅志祥', '長香蕉'}
#集合和列表也可以
set4=['小可愛','西紅柿']
set1.union(set4)
{'大桃子', '小可愛', '小蘋果', '西紅柿', '長香蕉'}
#利用交集并集來寫一個字符串相似的小方法
def jaccard_sim(arg0,arg1):
? ? set1 = set(arg0)
? ? set2 = set(arg1)
? ? sim = len(set1.intersection(set2))/len(set1.union(set2))
? ? return(sim)#intersection 求集合的交集
arg0 = '(質(zhì)量問題)標(biāo)識標(biāo)簽不合格'
arg1 = '(質(zhì)量問題)涉嫌質(zhì)量不合格'?
jaccard_sim(arg0,arg1)
0.6428571428571429

檢測下兩個標(biāo)題的相似性


arg0 = '羅志祥道歉人設(shè)崩塌:多個品牌商中槍 代言微博遭刪除'
arg1 = '凌晨五點(diǎn)的羅志祥:你知不知道為了出軌,我有多努力'? ?
jaccard_sim(arg0,arg1)
0.1428571428571

17祟峦、update()

描述:update() 方法用于修改當(dāng)前集合徙鱼,可以添加新的元素或集合到當(dāng)前集合中,如果添加的元素在集合中已存在厌衙,則該元素只會出現(xiàn)一次绞绒,重復(fù)的會忽略。

語法:set.update(set)

參數(shù):set -- 必需喻杈,可以是元素或集合


x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
x.update(y)
print(x)
{'banana', 'apple', 'google', 'runoob', 'cherry'}

對于初學(xué)者想更輕松的學(xué)好Python開發(fā)狰晚,爬蟲技術(shù)壁晒,Python數(shù)據(jù)分析,人工智能等技術(shù),這里也給大家準(zhǔn)備了一套python學(xué)習(xí)資料秒咐,免費(fèi)領(lǐng)取携取。

評論?私信回復(fù):學(xué)習(xí) 即可領(lǐng)取

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市不撑,隨后出現(xiàn)的幾起案子惊豺,更是在濱河造成了極大的恐慌,老刑警劉巖揩页,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烹俗,死亡現(xiàn)場離奇詭異幢妄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乎赴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饿序,“玉大人羹蚣,你說我怎么就攤上這事⊙氏遥” “怎么了胁出?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵划鸽,是天一觀的道長。 經(jīng)常有香客問我嫂用,道長丈冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任往弓,我火速辦了婚禮蓄氧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撇寞。我一直安慰自己堂氯,他們只是感情好咽白,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著排抬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪莫绣。 梳的紋絲不亂的頭發(fā)上悠鞍,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天咖祭,我揣著相機(jī)與錄音蔫骂,去河邊找鬼。 笑死辽旋,一個胖子當(dāng)著我的面吹牛补胚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溶其,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼瓶逃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了契沫?” 一聲冷哼從身側(cè)響起昔汉,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挤庇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渴语,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昆咽,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牙甫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年窟哺,在試婚紗的時候發(fā)現(xiàn)自己被綠了技肩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖然痊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锹引,我是刑警寧澤唆香,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布袋马,位于F島的核電站,受9級特大地震影響虑凛,放射性物質(zhì)發(fā)生泄漏桑谍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一贞间、第九天 我趴在偏房一處隱蔽的房頂上張望雹仿。 院中可真熱鬧,春花似錦峻仇、人聲如沸邑商。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涩金。三九已至,卻和暖如春枣抱,著一層夾襖步出監(jiān)牢的瞬間辆床,已是汗流浹背桅狠。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工中跌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漩符。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓嗜暴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親萎战。 傳聞我的和親對象是個殘疾皇子舆逃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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