一贷掖、概要
set是一個(gè)無序且不重復(fù)的元素集合嫡秕。
集合對(duì)象是一組無序排數(shù)據(jù),集合成員可以做字典中的鍵苹威。集合支持用in和not in操作符檢查成員昆咽,由len()內(nèi)建函數(shù)得到集合的基數(shù)(大小), 用 for 循環(huán)迭代集合的成員牙甫。但是因?yàn)榧媳旧硎菬o序的掷酗,不可以為集合創(chuàng)建索引或執(zhí)行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值窟哺。set和dict一樣泻轰,只是沒有value,相當(dāng)于dict的key集合且轨,由于dict的key是不重復(fù)的浮声,且key是不可變對(duì)象因此可以作為可以做字典中的鍵
主要用來做關(guān)系測試和消除重復(fù)元素
二、特點(diǎn)
- 不重復(fù)
- 元素為不可變對(duì)象
- 無序
三旋奢、創(chuàng)建
- 語法格式一
s = {元素,元素,元素,元素}
- 語法格式二
s = set(seq=())
- 注意事項(xiàng)
- 在創(chuàng)建空集合的時(shí)候只能使用s=set()泳挥,因?yàn)閟={}創(chuàng)建的是空字典
- 如果傳入的參數(shù)有重復(fù),會(huì)自動(dòng)忽略
- 必須是可以迭代的對(duì)象 例如: 序列,元組
- 舉個(gè)栗子
s = {'k1', 'k2', 'k2', 1, 3.14} # 字符串對(duì)象轉(zhuǎn)化成集合 s = set('python') # 將列表轉(zhuǎn)化成集合 s = set(['y', 'b', 'o', 'o']) # 將字典轉(zhuǎn)化成集合,注意只會(huì)包含鍵,不包含value s = set({"k1": 'v1', 'k2': 'v2'}) # 將元組轉(zhuǎn)化成集合 s = {('k1', 'k2', 'k2')}
#使用set()創(chuàng)建集合是注意 # s = set(1) # 錯(cuò)誤 # s = set(True) # 錯(cuò)誤 ``` TypeError: 'int' object is not iterable ```
四至朗、關(guān)系測試
4.1屉符、說明
union(并集),intersection(交集)锹引,difference(差集)和sysmmetric difference(對(duì)稱差集)等數(shù)學(xué)運(yùn)算
4.2矗钟、并集(|)
- 說明
數(shù)學(xué)概念: 給定兩個(gè)集合A,B嫌变,把他們所有的元素合并在一起組成的集合真仲,叫做集合A與集合B的并集,記作A∪B初澎,讀作A并B秸应。
去重后所有元素放一起 - 語法格式
集合.union(集合)
?集合 | 集合 | 集合...
- 舉個(gè)栗子
s1 = {1, 2, 3, 4, 5} s2 = {4, 5, 6, 7, 8} print(s1.union(s2)) s1 = {'a', 'b', 'c', 'd', 'python', 1} s2 = {1, 2, 'd', 'java'} print(s1.union(s2))
4.3虑凛、交集(&)
- 說明
數(shù)學(xué)概念: 設(shè)A,B是兩個(gè)集合软啼,由所有屬于集合A且屬于集合B的元素所組成的集合桑谍,叫做集合A與集合B的交集
兩者都存在的 - 語法格式
集合.intersection(集合)
集合 & 集合 & 集合 & 集合...
- 舉個(gè)栗子
s1 = {1, 2, 3, 4, 5} s2 = {4, 5, 6, 7, 8} print(s1.intersection(s2)) s1 = {'a', 'b', 'c', 'd', 'python', 1} s2 = {1, 2, 'd', 'java'} print(s1.intersection(s2))
4.4、差集(-)
- 說明
數(shù)學(xué)概念:以屬于A而不屬于B的元素為元素的集合成為A與B的差
你有我沒有 - 語法格式
集合.difference(集合)
集合 - 集合 - 集合 ...
- 舉個(gè)栗子
s1 = {1, 2, 3, 4, 5} s2 = {4, 5, 6, 7, 8} print(s1.difference(s2)) # {1, 2, 3} s1 = {'a', 'b', 'c', 'd', 'python', 1} s2 = {1, 2, 'd', 'java'} print(s1.difference(s2)) # {'b', 'python', 'c', 'a'}
4.5祸挪、對(duì)稱差集(^)
- 說明
數(shù)學(xué)概念:兩個(gè)集合的對(duì)稱差是只屬于其中一個(gè)集合锣披,而不屬于另一個(gè)集合的元素組成的集合
集合1和集合2都互相都沒有(去重后放到一起) - 語法格式
集合.symmetric_difference(集合)
集合 ^ 集合
- 舉個(gè)栗子
s1 = {1, 2, 3, 4, 5} s2 = {4, 5, 6, 7, 8} print(s1.symmetric_difference(s2)) s1 = {'a', 'b', 'c', 'd', 'python', 1} s2 = {1, 2, 'd', 'java'} print(s1.symmetric_difference(s2))
4.6、子集(issubset)
- 說明
數(shù)學(xué)概念:如果集合A的任意一個(gè)元素都是集合B的元素贿条,那么集合A稱為集合B的子集雹仿。
集合1是不是集合2的子集 - 語法格式
集合1.issubset(集合2)
- 舉個(gè)栗子
s1 = {1, 2, 3, 4, 5, 6, 7, 8} s2 = {4, 5, 6, 7, 8} print(s2.issubset(s1)) # True s1 = {1, 2, 3, 4, 5, 6, 7, 8} s2 = {4, 5, 6, 7, 8,9} print(s2.issubset(s1)) # False
4.7、父集(issuperset)
- 說明
集合1是不是集合2的父集 - 語法格式
集合1.issuperset(集合2)
- 舉個(gè)栗子
s1 = {1, 2, 3, 4, 5, 6, 7, 8} s2 = {4, 5, 6, 7, 8} print(s1.issubset(s2))
4.8整以、是否存在交集
- 說明
是否存在交集 - 語法格式
集合1.isdisjoint(集合2)
- 舉個(gè)栗子
s1 = {1, 2, 3, 4, 5} s2 = {4, 5, 6, 7, 8} print(s1.isdisjoint(s2)) # False s1 = {'a', 'b', 'c', 'python'} s2 = {1, 2, 'd', 'java'} print(s1.isdisjoint(s2)) # True
五胧辽、其它方法
5.1、add
- 說明
往set中添加一個(gè)元素只有set中不存在該元素時(shí)公黑,才會(huì)加入該元素 - 語法格式
set.add(元素)
- 參數(shù)說明
- 要添加的元素,必須是不可變的
- 返回值
無 - 舉個(gè)栗子
s = {(1, 2, 3), '元素1', 1, True} s.add(2) # {'元素1', 2, 1, (1, 2, 3)} s = {(1, 2, 3), '元素1', 1, True} s.add(1) # {'元素1', 1, (1, 2, 3)} #注意元素是不可變的所以list不能作為元素 s.add([1, 2]) ``` TypeError: unhashable type: 'list' ```
5.2邑商、update
- 說明
把新的元素添加到set中,把已有元素從set中刪除凡蚜。 - 語法格式
set.update(s)
- 參數(shù)說明
- 必須是可迭代的對(duì)象
注意:傳入的元素拆分人断,做為單個(gè)元素傳入到集合中
- 必須是可迭代的對(duì)象
- 返回
無 - 舉個(gè)栗子
s = set() # 將字符串中的每一個(gè)元素添加到集合中 s.update('python') print(s) #講列表中的每一個(gè)元素更新到集合中 s.update([1, 2, 3, 4, 5]) print(s) #把字典里的key更新到集合中 s.update({1: 2, 'name': '小明'}) print(s) #錯(cuò)誤 s.update(1) s.update(True)
5.3、pop
- 說明
隨機(jī)刪除并返回set類型的集合中的一個(gè)不確定的元素朝蜘,如果為空引發(fā)KeyError錯(cuò)誤恶迈。 - 語法格式
element = s.pop()
- 參數(shù)說明:
- 無
- 返回值
被刪除的元素 - 舉個(gè)栗子
s = set([2, 3, 4, 5]) ele = s.pop()
5.4、remove
- 說明
刪除指定元素 - 語法格式
set.remove(ele)
- 參數(shù)說明
- 要?jiǎng)h除的元素
- 舉個(gè)栗子
s = {1, 'python', (1, 2, 3)} print(s) s.remove(1) print(s)
5.5谱醇、discard
- 說明
如果存在則刪除暇仲;如果沒找到,則什么也不做 - 語法格式
discard(element)
- 參數(shù)說明
- 表示要查找并刪除的元素
- 返回值
無 - 舉個(gè)栗子
set_list = set([1, 2, 3, 4, 5]) set_list.discard(1) set_list.discard('python') print(set_list)
5.6枣抱、clear
- 說明
清空s集合中的所有元素 - 語法格式
set.clear()
- 參數(shù)說明
- 無
- 返回值
無 - 舉個(gè)栗子
s = set([1, 2, 3, 4, 5]) s.clear()
5.7熔吗、copy
- 說明
復(fù)制集合 - 語法格式
set.copy()
- 參數(shù)說明
- 無
- 返回值
一個(gè)新的集合 - 舉個(gè)栗子
s = set('123456') new_s = s.copy()
5.8辆床、集合的范圍判斷
- 說明
集合可以使用大于(>
)佳晶、小于(<
)、大于等于(>=
)讼载、小于等于(<=
)轿秧、等于(==
)、不等于(!=
)來判斷某個(gè)集合是否完全包含于另一個(gè)集合咨堤,也可以使用子父集判斷函數(shù)菇篡。 也可以使用成員運(yùn)算 - 舉個(gè)栗子
s1 = set([1, 2, 3, 4, 5]) s2 = set([1, 2, 3, 4]) s3 = set(['1', '8', '9', '5']) s1 > s2 True s1 > s3 False s1 >= s2 True s2 < s1 True s1 < s3 False s3 < s1 False s1 == s2 False s2 == s3 False s1 != s2 True 1 in s1 True 6 in s1 False 2 not in s1 False 6 not in s1 True
六、集合推導(dǎo)
- 說明
它們跟列表推導(dǎo)式也是類似的一喘。 唯一的區(qū)別在于它使用大括號(hào){}驱还。 - 語法格式
{表達(dá)式 for item in iterrator if 條件表達(dá)式}
- 舉個(gè)栗子
# 重復(fù)的數(shù)據(jù)將會(huì)被忽略 num = {x**2 for x in [100, 100, 30,50,60,50]} print(num)