15、集合

一贷掖、概要

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)

  1. 不重復(fù)
  2. 元素為不可變對(duì)象
  3. 無序

三旋奢、創(chuàng)建

  1. 語法格式一
    s = {元素,元素,元素,元素}
    
  2. 語法格式二
    s = set(seq=())
    
  3. 注意事項(xiàng)
    • 在創(chuàng)建空集合的時(shí)候只能使用s=set()泳挥,因?yàn)閟={}創(chuàng)建的是空字典
    • 如果傳入的參數(shù)有重復(fù),會(huì)自動(dòng)忽略
    • 必須是可以迭代的對(duì)象 例如: 序列,元組
  4. 舉個(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矗钟、并集(|)

  1. 說明
    數(shù)學(xué)概念: 給定兩個(gè)集合A,B嫌变,把他們所有的元素合并在一起組成的集合真仲,叫做集合A與集合B的并集,記作A∪B初澎,讀作A并B秸应。
    去重后所有元素放一起
  2. 語法格式
    集合.union(集合)
    
    集合 | 集合 | 集合...
    
    ?
  3. 舉個(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虑凛、交集(&)

  1. 說明
    數(shù)學(xué)概念: 設(shè)AB是兩個(gè)集合软啼,由所有屬于集合A屬于集合B的元素所組成的集合桑谍,叫做集合A與集合B交集
    兩者都存在的
  2. 語法格式
    集合.intersection(集合)
    
    集合 & 集合 & 集合 & 集合...
    
  3. 舉個(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、差集(-)

  1. 說明
    數(shù)學(xué)概念:以屬于A而不屬于B的元素為元素的集合成為A與B的差
    你有我沒有
  2. 語法格式
    集合.difference(集合)
    
    集合 - 集合  - 集合 ...
    
  3. 舉個(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ì)稱差集(^)

  1. 說明
    數(shù)學(xué)概念:兩個(gè)集合的對(duì)稱差是只屬于其中一個(gè)集合锣披,而不屬于另一個(gè)集合的元素組成的集合
    集合1和集合2都互相都沒有(去重后放到一起)
  2. 語法格式
    集合.symmetric_difference(集合)
    
    集合 ^ 集合
    
  3. 舉個(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)

  1. 說明
    數(shù)學(xué)概念:如果集合A任意一個(gè)元素都是集合B的元素贿条,那么集合A稱為集合B子集雹仿。
    集合1是不是集合2的子集
  2. 語法格式
    集合1.issubset(集合2)
    
  3. 舉個(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. 說明
    集合1是不是集合2的父集
  2. 語法格式
    集合1.issuperset(集合2)
    
  3. 舉個(gè)栗子
    s1 = {1, 2, 3, 4, 5, 6, 7, 8}
    s2 = {4, 5, 6, 7, 8}
    print(s1.issubset(s2))
    

4.8整以、是否存在交集

  1. 說明
    是否存在交集
  2. 語法格式
    集合1.isdisjoint(集合2)
    
  3. 舉個(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

  1. 說明
    往set中添加一個(gè)元素只有set中不存在該元素時(shí)公黑,才會(huì)加入該元素
  2. 語法格式
    set.add(元素)
    
  3. 參數(shù)說明
    • 要添加的元素,必須是不可變的
  4. 返回值
  5. 舉個(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

  1. 說明
    把新的元素添加到set中,把已有元素從set中刪除凡蚜。
  2. 語法格式
    set.update(s)
    
  3. 參數(shù)說明
    • 必須是可迭代的對(duì)象
      注意:傳入的元素拆分人断,做為單個(gè)元素傳入到集合中
  4. 返回
  5. 舉個(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

  1. 說明
    隨機(jī)刪除并返回set類型的集合中的一個(gè)不確定的元素朝蜘,如果為空引發(fā)KeyError錯(cuò)誤恶迈。
  2. 語法格式
    element = s.pop() 
    
  3. 參數(shù)說明:
  4. 返回值
    被刪除的元素
  5. 舉個(gè)栗子
    s = set([2, 3, 4, 5])
    ele = s.pop()
    

5.4、remove

  1. 說明
    刪除指定元素
  2. 語法格式
    set.remove(ele)
    
  3. 參數(shù)說明
    • 要?jiǎng)h除的元素
  4. 舉個(gè)栗子
    s = {1, 'python', (1, 2, 3)}
    print(s)
    s.remove(1)
    print(s)
    

5.5谱醇、discard

  1. 說明
    如果存在則刪除暇仲;如果沒找到,則什么也不做
  2. 語法格式
    discard(element)
    
  3. 參數(shù)說明
    • 表示要查找并刪除的元素
  4. 返回值
  5. 舉個(gè)栗子
    set_list = set([1, 2, 3, 4, 5])
    set_list.discard(1)
    set_list.discard('python')
    print(set_list)
    

5.6枣抱、clear

  1. 說明
    清空s集合中的所有元素
  2. 語法格式
    set.clear()
    
  3. 參數(shù)說明
  4. 返回值
  5. 舉個(gè)栗子
    s = set([1, 2, 3, 4, 5])
    s.clear()
    

5.7熔吗、copy

  1. 說明
    復(fù)制集合
  2. 語法格式
    set.copy()
    
  3. 參數(shù)說明
  4. 返回值
    一個(gè)新的集合
  5. 舉個(gè)栗子
    s = set('123456')
    new_s = s.copy()
    

5.8辆床、集合的范圍判斷

  1. 說明
    集合可以使用大于(>)佳晶、小于(<)、大于等于(>=)讼载、小于等于(<=)轿秧、等于(==)、不等于(!=)來判斷某個(gè)集合是否完全包含于另一個(gè)集合咨堤,也可以使用子父集判斷函數(shù)菇篡。 也可以使用成員運(yùn)算
  2. 舉個(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)

  1. 說明
    它們跟列表推導(dǎo)式也是類似的一喘。 唯一的區(qū)別在于它使用大括號(hào){}驱还。
  2. 語法格式
    {表達(dá)式 for item in iterrator if 條件表達(dá)式}  
    
  3. 舉個(gè)栗子
    # 重復(fù)的數(shù)據(jù)將會(huì)被忽略
    num = {x**2 for x in [100, 100, 30,50,60,50]}
    print(num)
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嗜暴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子议蟆,更是在濱河造成了極大的恐慌闷沥,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咐容,死亡現(xiàn)場離奇詭異舆逃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)戳粒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門路狮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔚约,你說我怎么就攤上這事奄妨。” “怎么了炊琉?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵展蒂,是天一觀的道長。 經(jīng)常有香客問我苔咪,道長锰悼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任团赏,我火速辦了婚禮箕般,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舔清。我一直安慰自己丝里,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布体谒。 她就那樣靜靜地躺著杯聚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抒痒。 梳的紋絲不亂的頭發(fā)上幌绍,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音故响,去河邊找鬼傀广。 笑死,一個(gè)胖子當(dāng)著我的面吹牛彩届,可吹牛的內(nèi)容都是我干的伪冰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼樟蠕,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼贮聂!你這毒婦竟也來了靠柑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤吓懈,失蹤者是張志新(化名)和其女友劉穎病往,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骄瓣,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡停巷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榕栏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畔勤。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扒磁,靈堂內(nèi)的尸體忽然破棺而出庆揪,到底是詐尸還是另有隱情,我是刑警寧澤妨托,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布缸榛,位于F島的核電站,受9級(jí)特大地震影響兰伤,放射性物質(zhì)發(fā)生泄漏内颗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一敦腔、第九天 我趴在偏房一處隱蔽的房頂上張望均澳。 院中可真熱鬧,春花似錦符衔、人聲如沸找前。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躺盛。三九已至,卻和暖如春形帮,著一層夾襖步出監(jiān)牢的瞬間槽惫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工沃缘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躯枢,地道東北人则吟。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓槐臀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親氓仲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子水慨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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