溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python3集合set入門(mén)基礎(chǔ)知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-11-05 16:04:52 來(lái)源:億速云 閱讀:118 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“Python3集合set入門(mén)基礎(chǔ)知識(shí)點(diǎn)有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Python3集合set入門(mén)基礎(chǔ)知識(shí)點(diǎn)有哪些”吧!

集合(set)是一個(gè)無(wú)序的不重復(fù)元素序列。

可以使用大括號(hào) { } 或者 set() 函數(shù)創(chuàng)建集合,注意:創(chuàng)建一個(gè)空集合必須用 set() 而不是 { },因?yàn)?{ } 是用來(lái)創(chuàng)建一個(gè)空字典。

集合、是字典的表親{}并不是字典的特權(quán)

集合的特點(diǎn):

1 具有唯一性2 不支持索引3 與字典相同,也是無(wú)序的

創(chuàng)建格式:

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

創(chuàng)建方法

num1 = {1,2,3,4}num2 = set(['q','w','e','r'])print(num1,num2)num3 = [1,2,3,4,2,4,2,1]temp = num3.copy()temp = set(temp)print(temp)

實(shí)例

>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}>>> print(basket)           # 這里演示的是去重功能{'orange', 'banana', 'pear', 'apple'}>>> 'orange' in basket         # 快速判斷元素是否在集合內(nèi)True>>> 'crabgrass' in basketFalse>>> # 下面展示兩個(gè)集合間的運(yùn)算....>>> a = set('abracadabra')>>> b = set('alacazam')>>> a{'a', 'r', 'b', 'c', 'd'}>>> a - b               # 集合a中包含而集合b中不包含的元素{'r', 'd', 'b'}>>> a | b               # 集合a或b中包含的所有元素{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}>>> a & b               # 集合a和b中都包含了的元素{'a', 'c'}>>> a ^ b               # 不同時(shí)包含于a和b的元素{'r', 'd', 'b', 'm', 'z', 'l'}

類(lèi)似列表推導(dǎo)式,同樣集合支持集合推導(dǎo)式(Set comprehension):

>>>a = {x for x in 'abracadabra' if x not in 'abc'}>>> a{'r', 'd'}

集合的基本操作

1、添加元素

語(yǔ)法格式如下:

s.add( x )

將元素 x 添加到集合 s 中,如果元素已存在,則不進(jìn)行任何操作。

>>>thisset = set(("Baidu", "jb51", "Taobao"))>>> thisset.add("Facebook")>>> print(thisset){'Facebook', 'Taobao', 'Baidu', 'jb51'}

輸出的內(nèi)容都是隨機(jī)的沒(méi)有排序

還有一個(gè)方法,也可以添加元素,且參數(shù)可以是列表,元組,字典等,語(yǔ)法格式如下:

s.update( x )

x 可以有多個(gè),用逗號(hào)分開(kāi)。

>>>thisset = set(("Baidu", "Jb51", "Taobao"))>>> thisset.update({1,3})>>> print(thisset){1, 3, 'Baidu', 'Taobao', 'Jb51'}>>> thisset.update([1,4],[5,6])>>> print(thisset){1, 3, 4, 5, 6, 'Baidu', 'Taobao', 'Jb51'}>>>

2、移除元素

語(yǔ)法格式如下:

s.remove( x )

將元素 x 從集合 s 中移除,如果元素不存在,則會(huì)發(fā)生錯(cuò)誤。

實(shí)例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))>>> thisset.remove("Taobao")>>> print(thisset){'Baidu', 'Jb51'}>>> thisset.remove("Facebook")  # 不存在會(huì)發(fā)生錯(cuò)誤Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: 'Facebook'>>>

此外還有一個(gè)方法也是移除集合中的元素,且如果元素不存在,不會(huì)發(fā)生錯(cuò)誤。格式如下所示:

s.discard( x )

實(shí)例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))>>> thisset.discard("Facebook") # 不存在不會(huì)發(fā)生錯(cuò)誤>>> print(thisset){'Taobao', 'Baidu', 'Jb51'}

我們也可以設(shè)置隨機(jī)刪除集合中的一個(gè)元素,語(yǔ)法格式如下:

s.pop()

腳本模式實(shí)例(Python 3.0+)

thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))x = thisset.pop()print(x)

輸出結(jié)果:

$ python3 test.py

Jb51

多次執(zhí)行測(cè)試結(jié)果都不一樣。

set 集合的 pop 方法會(huì)對(duì)集合進(jìn)行無(wú)序的排列,然后將這個(gè)無(wú)序排列集合的左面第一個(gè)元素進(jìn)行刪除。

3、計(jì)算集合元素個(gè)數(shù)

語(yǔ)法格式如下:

len(s)

計(jì)算集合 s 元素個(gè)數(shù)。

實(shí)例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))>>> len(thisset)3

4、清空集合

語(yǔ)法格式如下:

s.clear()

清空集合 s。

實(shí)例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))>>> thisset.clear()>>> print(thisset)set()

5、判斷元素是否在集合中存在

語(yǔ)法格式如下:

x in s

判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。

實(shí)例(Python 3.0+)

>>>thisset = set(("Baidu", "Jb51", "Taobao"))>>> "Jb51" in thissetTrue>>> "Facebook" in thissetFalse>>>

集合內(nèi)置方法完整列表

add()為集合添加元素clear()移除集合中的所有元素copy()拷貝一個(gè)集合difference()返回多個(gè)集合的差集difference_update()移除集合中的元素,該元素在指定的集合也存在。discard()刪除集合中指定的元素intersection()返回集合的交集intersection_update()返回集合的交集。isdisjoint()判斷兩個(gè)集合是否包含相同的元素,如果沒(méi)有返回 True,否則返回 False。issubset()判斷指定集合是否為該方法參數(shù)集合的子集。issuperset()判斷該方法的參數(shù)集合是否為指定集合的子集pop()隨機(jī)移除元素remove()移除指定元素symmetric_difference()返回兩個(gè)集合中不重復(fù)的元素集合。symmetric_difference_update()移除當(dāng)前集合中在另外一個(gè)指定集合相同的元素,并將另外一個(gè)指定集合中不同的元素插入到當(dāng)前集合中。union()返回兩個(gè)集合的并集update()給集合添加元素

下面繼續(xù)為大家補(bǔ)充一些實(shí)例

s.update( "字符串" ) 與 s.update( {"字符串"} ) 含義不同:

s.update( {"字符串"} ) 將字符串添加到集合中,有重復(fù)的會(huì)忽略。s.update( "字符串" ) 將字符串拆分單個(gè)字符后,然后再一個(gè)個(gè)添加到集合中,有重復(fù)的會(huì)忽略。

>>> thisset = set(("Baidu", "Jb51", "Taobao"))>>> print(thisset){'Baidu', 'Jb51', 'Taobao'}>>> thisset.update({"Facebook"})>>> print(thisset){'Baidu', 'Jb51', 'Taobao', 'Facebook'}>>> thisset.update("Yahoo")>>> print(thisset){'h', 'o', 'Facebook', 'Baidu', 'Y', 'Jb51', 'Taobao', 'a'}>>>

set() 中參數(shù)注意事項(xiàng)

1.創(chuàng)建一個(gè)含有一個(gè)元素的集合

>>> my_set = set(('apple',))>>> my_set{'apple'}

2.創(chuàng)建一個(gè)含有多個(gè)元素的集合

>>> my_set = set(('apple','pear','banana'))>>> my_set{'apple', 'banana', 'pear'}

3.如無(wú)必要,不要寫(xiě)成如下形式

>>> my_set = set('apple')>>> my_set{'l', 'e', 'p', 'a'}>>> my_set1 = set(('apple'))>>> my_set1{'l', 'e', 'p', 'a'}

集合用 set.pop() 方法刪除元素的不一樣的感想如下:

1、對(duì)于 python 中列表 list、tuple 類(lèi)型中的元素,轉(zhuǎn)換集合是,會(huì)去掉重復(fù)的元素如下:

>>> list = [1,1,2,3,4,5,3,1,4,6,5]>>> set(list){1, 2, 3, 4, 5, 6}>>> tuple = (2,3,5,6,3,5,2,5)>>> set(tuple){2, 3, 5, 6}

2、集合對(duì) list 和 tuple 具有排序(升序),舉例如下:

>>> set([9,4,5,2,6,7,1,8]){1, 2, 4, 5, 6, 7, 8, 9}>>> set([9,4,5,2,6,7,1,8]){1, 2, 4, 5, 6, 7, 8, 9}

3、集合的 set.pop() 的不同認(rèn)為

有人認(rèn)為 set.pop() 是隨機(jī)刪除集合中的一個(gè)元素、我在這里說(shuō)句非也!對(duì)于是字典和字符轉(zhuǎn)換的集合是隨機(jī)刪除元素的。當(dāng)集合是由列表和元組組成時(shí)、set.pop() 是從左邊刪除元素的如下:

列表實(shí)例:

set1 = set([9,4,5,2,6,7,1,8])print(set1)print(set1.pop())print(set1)

輸出結(jié)果:

{1, 2, 4, 5, 6, 7, 8, 9}1{2, 4, 5, 6, 7, 8, 9}

元組實(shí)例:

set1 = set((6,3,1,7,2,9,8,0))print(set1)print(set1.pop())print(set1)

輸出結(jié)果:

{0, 1, 2, 3, 6, 7, 8, 9}0{1, 2, 3, 6, 7, 8, 9}

>>> thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))>>> y=set({'python'})>>> print(y.union(thisset)){'python', 'Taobao', 'Baidu', 'Facebook', 'Jb51'}

輸出結(jié)果:

{'python', 'Baidu', 'Taobao', 'Facebook', 'Jb51'}

y 的集合里此時(shí)只含有一個(gè)元素 'python',而如果不加花括號(hào)時(shí),y 的集合里含有'p','y','t','h','o','n'五個(gè)元素。

>>> thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))>>> y=set('python')>>> print(y.union(thisset)){'p', 'o', 'y', 'Taobao', 'h', 'Baidu', 'Facebook', 'Jb51', 'n', 't'}

也可以使用括號(hào):

thisset = set(("Baidu", "Jb51", "Taobao", "Facebook"))y=set(('python','love'))print(y.union(thisset))

輸出結(jié)果:

{'Facebook', 'Jb51', 'Taobao', 'python', 'love', 'Baidu'}

但是當(dāng) y 的集合里只有一個(gè)字符串時(shí),結(jié)果與不加花括號(hào)一樣。

列表的 sort 方法可以實(shí)現(xiàn)就地排序(無(wú)需創(chuàng)建新對(duì)象,字符串按首字母進(jìn)行排序):

a=[1, 51, 31, -3, 10]a.sort()print(a)s=['a','ab','3e','z']s.sort()print(s)

輸出:

[-3, 1, 10, 31, 51]['3e', 'a', 'ab', 'z']

按集合中的字符長(zhǎng)度進(jìn)行排序:

a=[1, 51, 31, -3, 10]a.sort()print(a)b=['a','ab','3ae','zaaa','1']b.sort()print(b)c=['a','ab','3ae','zaaa','1']c.sort(key=len)print(c)

輸出:

[-3, 1, 10, 31, 51]['1', '3ae', 'a', 'ab', 'zaaa']['a', '1', 'ab', '3ae', 'zaaa']

下面是其他網(wǎng)友的補(bǔ)充圖文

集合也也也也是python內(nèi)置的一種數(shù)據(jù)結(jié)構(gòu),它是一個(gè)無(wú)序且元素不重復(fù)的序列。這里有兩個(gè)關(guān)鍵詞一個(gè)是無(wú)序,這一點(diǎn)和字典是一樣的,另一個(gè)關(guān)鍵詞是元素不重復(fù),這一點(diǎn)和字典的key(鍵)是一樣的。這么看來(lái)集合和字典還真像,事實(shí)上他們長(zhǎng)的也很像:

集合和字典一樣也是用{}包起來(lái)的,那么問(wèn)題來(lái)了,如果只寫(xiě)一個(gè){}那它是集合還是字典呢?

{}里沒(méi)有元素創(chuàng)建的是字典,那么問(wèn)題又來(lái)了,空集合又該怎么創(chuàng)建呢?我們可以使用set()函數(shù)創(chuàng)建。既然集合已經(jīng)創(chuàng)建出來(lái)了,接著就看看集合的一些用法吧。

1.往集合里增加元素:

集合的add函數(shù)可以往集合里添加一個(gè)元素,update可以更新一個(gè)或多個(gè)元素,其參數(shù)可以是列表、集合等等。

2.刪除集合里的元素。

要?jiǎng)h除集合中的元素方法還挺多的啊,不過(guò)那個(gè)pop函數(shù)是認(rèn)真的嗎?隨機(jī)移除元素也太隨意了吧...

由于集合是無(wú)序的,所以沒(méi)辦法用下標(biāo)來(lái)獲取集合的元素,也沒(méi)辦法像字典一樣通過(guò)key來(lái)獲取值。這就尷尬了??磥?lái)集合就像貔貅一樣只能存數(shù)據(jù)不能取數(shù)據(jù)。

3.集合的運(yùn)算

交集和并集很好理解,差集是個(gè)相對(duì)的概念,集合1相對(duì)集合2差集和集合2相對(duì)集合1的差集是不一樣的,需要特別注意。所以對(duì)稱(chēng)差集可以理解為非交集元素組成的那部分。

4.集合的包含關(guān)系

集合的幾種關(guān)系:相交/不相交 ,包含/不包含(相對(duì)而言)。isdisjoint函數(shù)是判斷不相交的,不相交才返回True。

到此,相信大家對(duì)“Python3集合set入門(mén)基礎(chǔ)知識(shí)點(diǎn)有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI