Python的基本數(shù)據(jù)類型——Set

set是一組無序集合,集合中的每個(gè)元素都是獨(dú)一無二的皇型,集合本身可以添加媚狰、刪除元素,下面我們來了解一下集合(set)的特性

定義一個(gè)集合

a={1,True,'Hello world',(1,2,3)}
print(type(a))
# 輸出 set

元組使用小括號( ),列表使用中括號[ ],而集合則使用了大括號{ }來定義

集合的特性

  • 無序

之前分享字符串躯嫉、列表、元組的時(shí)候他們都有一個(gè)相同的特點(diǎn):有序杨拐,所以我們可以通過索引和切片的方式訪問每個(gè)元素祈餐。但是集合是無序的,這就意味著我們不能使用索引或切片

a={1,2,3,4,5}

print(a[1])
print(a[1:3])

# 以上情況都會報(bào)錯
  • 每個(gè)元素都是獨(dú)一無二的

對比列表哄陶、元組你會發(fā)現(xiàn)集合中的每個(gè)元素都是唯一的帆阳,因?yàn)榧系倪@種特性,我們往往可以使用集合去重

a={1,2,3,4,4,3,2}

print(a)
# 輸出 {1,2,3,4}

添加元素

add( )或者update( )都可以給集合添加元素屋吨,不同的是添加單個(gè)元素的時(shí)候使用add( ),如果被添加的對象是tuple( )蜒谤、list( )山宾、set( )等類型時(shí)可以使用update( ),下面通過代碼演示一下兩者的區(qū)別

  • add( )的使用方法
a = {1,2,3,4,5}

a.add(6)
print(a)
# 輸出 {1,2,3,4,5,6}
  • update( )的使用方法
a = {1,2,3,4,5}
a.update((5,6,7))
print(a)
# 輸出 {1,2,3,4,5,6,7}

刪除元素

discard( )和remove( )都可以刪除集合中的元素,兩種方法之間唯一的區(qū)別在于芭逝,如果元素不存在于集合中,使用discard( )刪除元素集合保持不變渊胸,而remove( )則會報(bào)錯

a={1,2,3,4}

a.discard(5)
print(a)
# 輸出 {1,2,3,4}

a.remove(5)
# 報(bào)錯
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 5

pop( )和clear( )也可以刪除集合中元素

a={1,2,3,4,5}

print(a.pop())
# 輸出1

print(a)
# 輸出{2,3,4,5}


a.clear()
print(a)
# 輸出 set()

小結(jié) discard( )旬盯、remove( )、pop( )翎猛、clear( )之間的區(qū)別

  • discard( )刪除不存在的集合元素不會報(bào)錯
  • remove( )刪除元素不存在的集合元素會報(bào)錯
  • pop( ) 會返回被刪除的元素
  • clear( )清空元素

集合的數(shù)學(xué)運(yùn)算

求兩個(gè)集合的差集

  • 需求: {1,2,3,4}胖翰、{2,3,5}.從第一個(gè)集合中剔除第二個(gè)集合也存在的元素
a={1,2,3,4}
b={2,3,5}

a-b
# 輸出{1,4}

或

a.difference(b)
# 輸出{1,4}

求兩個(gè)集合的交集

  • 需求: 求{1,2,3,4}、{2,3}這兩個(gè)集合的相同元素
 a={1,2,3,4}
 b={2,3,5}
 
a&b
# 輸出{2,3}

或

a.intersection(b)
# 輸出{2,3}

求兩個(gè)集合的并集

  • 需求:把{1,2,3,4}切厘、{3,4,5}這兩個(gè)集合合并成一個(gè)萨咳,并且不能有重復(fù)元素
 a={1,2,3,4}
 b={2,3,5}
 
a|b
# 輸出{1,2,3,4,5}

或

a.union(b)
# 輸出{1,2,3,4,5}

上面的三種方法已經(jīng)能滿足大部分需求,但是你可能還有一種需求疫稿,剔除兩個(gè)集合中相同的元素培他,并且讓不同的元素組成一個(gè)新的集合,如下面的代碼所示:

a={1,2,3,4}
b={3,4,5,6}
# 組成{1,2,5,6}

a^b

或

a.symmetric_difference(b)

# 輸出{1,2,5,6}

集合中的更多內(nèi)置方法

拷貝一個(gè)集合

a={1,2,3,4}
b=a.copy()

print(b)
# 輸出{1,2,3,4}

判斷兩個(gè)集合是否存在共同元素

a={1,2,3,4}
b={100,200,300}
c={1,100,4}

print(a.isdisjoint(b))
# 沒有共同元素 返回True

print(a.isdisjoint(c))
# 有共同元素 返回 False

判斷一個(gè)集合是否包含另外一個(gè)集合

a={1,2,3,4}
b={1,2,3,4,5}

# 判斷a是否是b的子集
print(a.issubset(b))
# 輸出 True

# 判斷b是否是a的子集
print(b.issubset(a))
# 輸出 False

判斷集合中的元素是否都是true

print(all({1,2,3,'Test'}))
# 輸出 True

# 如果集合為空也會返回True
print(all({}))
# 輸出 True

print(all({False,3,4,5}))
# 輸出 False

計(jì)算集合的長度

a={1,2,3,4,5}
print(len(a))
# 輸出 5

print(len({}))
# 輸出 0

計(jì)算集合中最大值

a={1,2,3,4,5}
print(max(a))
# 輸出 5

計(jì)算集合中的最小值

a={1,2,3,4,5}
print(min(a))
# 輸出 1

計(jì)算集合元素的和

a={1,2,3,4,5}
print(sum(a))
# 輸出 15

判斷一個(gè)元素是否存在于集合

a={1,2,3,4,5}
print(1 in a)
# 輸出 True

print(10 in a)
# 輸出 False

list和set的相互轉(zhuǎn)化

a=[1,2,3,4,5]
print(set(a))
# 輸出{1,2,3,4,5}

a={1,2,3,4,5}
print(list(a))
# 輸出[1,2,3,4,5]

list和set的相互轉(zhuǎn)化可以去除list中的重復(fù)元素遗座,主要就是借助了集合元素必須獨(dú)一無二的特性

總結(jié):集合是python中一種重要的數(shù)據(jù)類型舀凛,要重點(diǎn)掌握集合的基本特性,熟練運(yùn)用差集途蒋、交集猛遍、并集,一些內(nèi)置方法可以先了解一下号坡,方便日后寫代碼的時(shí)候查閱資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懊烤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宽堆,更是在濱河造成了極大的恐慌腌紧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畜隶,死亡現(xiàn)場離奇詭異寄啼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)代箭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門墩划,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗡综,你說我怎么就攤上這事乙帮。” “怎么了极景?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵察净,是天一觀的道長驾茴。 經(jīng)常有香客問我,道長氢卡,這世上最難降的妖魔是什么锈至? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮译秦,結(jié)果婚禮上峡捡,老公的妹妹穿的比我還像新娘。我一直安慰自己筑悴,他們只是感情好们拙,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阁吝,像睡著了一般砚婆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上突勇,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天装盯,我揣著相機(jī)與錄音,去河邊找鬼甲馋。 笑死验夯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摔刁。 我是一名探鬼主播挥转,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼共屈!你這毒婦竟也來了绑谣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤拗引,失蹤者是張志新(化名)和其女友劉穎借宵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矾削,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壤玫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哼凯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片香到。...
    茶點(diǎn)故事閱讀 40,926評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡露筒,死狀恐怖醇王,靈堂內(nèi)的尸體忽然破棺而出朵你,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布她渴,位于F島的核電站达址,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趁耗。R本人自食惡果不足惜沉唠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苛败。 院中可真熱鬧满葛,春花似錦、人聲如沸著拭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡遮。三九已至,卻和暖如春暗赶,著一層夾襖步出監(jiān)牢的瞬間鄙币,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工蹂随, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留十嘿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓岳锁,卻偏偏與公主長得像绩衷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子激率,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評論 2 361

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