一蹈丸、集合的定義
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)取