摘要:集合是中一種基本數(shù)據(jù)類(lèi)型,它分為可變集合和不可變集合兩種。小于和大于意味著兩個(gè)集合在比較時(shí)不能相等。等于號(hào)允許非嚴(yán)格定義的子集和超集。函數(shù)的作用是判斷集合是否是集合的子集,如果是返回,否則返回。
集合set是Python中一種基本數(shù)據(jù)類(lèi)型,它分為可變集合(set)和不可變集合(frozenset)兩種。類(lèi)似于其他語(yǔ)言,集合是一個(gè)無(wú)序不重復(fù)元素集,包括創(chuàng)建集合set、向集合中添加元素、刪除集合中的元素、求集合的交集、并集、差集等操作
(一)集合的增刪改查
(1)集合的創(chuàng)建與賦值——唯一的方法工廠方法 set()和 frozenset()
>>> l=set() #空集合 >>> s=set("cheeseshop") #字符串作為參數(shù) >>> s set(["c", "e", "h", "o", "p", "s"]) >>> s1 = set([1,2,3,1,3,4,5]) #list作為參數(shù) >>> s1 set([1, 2, 3, 4]) >>> s2 = set((1,2,3,4,1)) #元組作為參數(shù) >>> s2 set([1, 2, 3, 4]) >>> s3 = set({1:2,2:3}) #字典作為參數(shù) >>> s3 set([1, 2]) >>>?b=set(3,4,5) Traceback?(most?recent?call?last):File?"",?line?1,?in? TypeError:?set?expected?at?most?1?arguments,?got?3
(2)訪問(wèn)集合的值
遍歷查看集合成員或檢查某項(xiàng)元素是否是一個(gè)集合中的成員:
>>> s set(["c", "e", "h", "o", "p", "s"]) >>> "k" in s False >>> "c" not in s False >>> for i in s: ... print i #輸出c e h o p s
(3)更新集合
用各種集合內(nèi)建的方法和操作符添加和刪除集合的成員:只有可變集合可以修改不可變集合不可以修改。
>>> s set(["c", "e", "h", "o", "p", "s"]) >>> s.add("z") >>> s set(["c", "e", "h", "o", "p", "s", "z"]) >>> s.update("pypi") >>> s set(["c", "e", "i", "h", "o", "p", "s", "y", "z"])
(4)刪除集合中的成員和集合
如果如何刪除集合本身,可以像刪除任何 Python 對(duì)象一樣,令集合超出它的作用范圍,或調(diào)用 del 將他們直接清除出當(dāng)前的名字空間。
>>> s.remove("z") >>> s set(["c", "e", "i", "h", "o", "p", "s", "y"]) >>> s-=set("pypi") >>> s set(["c", "e", "h", "o", "s"]) >>>del s #刪除s集合
集合刪除異常:
>>> try: ...??? s.remove("444") ... except KeyError,e: ...??? print "not exists" ... else: ...??? print "success"
集合的替換:(沒(méi)有修改,只有先刪除再增加)
方法一:先刪除再增加
>>> s.remove("hig") >>> type(set("abc"))>>> s.add("abc") >>> s set(["c", "b", "abc", "y", "x", "z"])
方法二:先轉(zhuǎn)換成列表,再修改
>>> t=list(s) >>> t.append(49) >>> ss=set(t) >>> ss set([49, "add", "5", "4"])
?
setVar.discard(element)?
參數(shù)說(shuō)明:?setVar :為一個(gè)set類(lèi)型的變量?element :表示要查找并刪除的元素?函數(shù)作用:?在集合setVar中查找element元素,如果存在則刪除;如果沒(méi)找到,則什么也不做。該函數(shù)沒(méi)有返回值
>>> sList=set([1,2,3,4,5]) >>> sList.discard(1) >>> sList.discard(1) >>> print sList set([2, 3, 4, 5])
(5)轉(zhuǎn)換
集合與序列間的轉(zhuǎn)換
集合和序列之間的轉(zhuǎn)換跟序列之間互轉(zhuǎn)是一樣的,唯一不同?的就是序列轉(zhuǎn)成集合后,重復(fù)的元素被去掉了
>>> testStr="python is good" >>> st=set(testStr) >>> print st set([" ", "d", "g", "i", "h", "o", "n", "p", "s", "t", "y"])
集合轉(zhuǎn)字符串時(shí),直接使用str()函?數(shù)進(jìn)行轉(zhuǎn)換,得到的將是集合的字?符串形式。要想真正轉(zhuǎn)成字符串,?我們需要借助字符串連接函數(shù)?join()函數(shù)來(lái)完成。
>>> s1="".join(st) ? #但是是無(wú)序的 >>> s1 " dgihonpsty"
集合與列表互轉(zhuǎn)
>>> listTest=[1,2,3,2,"a","b"] >>> sList=set(listTest) >>> sList set(["a", 1, 2, 3, "b"]) >>> list1=list(sList) >>> list1 ["a", 1, 2, 3, "b"]
元組與集合互轉(zhuǎn)
>>> tupTest = (1, 2, 3, 2, "a", "b", "a") >>> sTup=set(tupTest) >>> sTup set(["a", 1, 2, 3, "b"]) >>> tup=tuple(sTup) >>> tup ("a", 1, 2, 3, "b")
(6)pop
>>> s.pop() "h" >>> s.clear() >>> s set([])
注:pop是隨機(jī)的如果想刪除最后一個(gè),如果想刪除最后一個(gè)元素時(shí),如下:
先遍歷找到這個(gè)元素并記錄下最后一個(gè)數(shù)值通過(guò)remove刪除
>>> s set(["c", "e", "d", "m", "l", "o", "4", "w", 4]) >>> i=0 >>> value="" >>> for x in s: ...??? if i==8: ...??????? value=x ...??? i+=1 ... >>> value 4 >>> s.remove(value)
(7)clear /copy/ len
sList=set([1,23,4,5]) >>> sList.clear() >>> print sList set([])
?
s2=set([1,2,3,4,5]) >>> s2=sList.copy() >>> id(s2) 4321621440 >>> id(sList) 4321422360
?
>>> len(s2) 0
(二)集合的類(lèi)型操作符
(1)子集超集
“小于”符號(hào)( <, <= )用來(lái)判斷子集
“大于”符號(hào)( >, >= )用來(lái)判斷超集。
“小于” 和 “大于”意味著兩個(gè)集合在比較時(shí)不能相等。等于號(hào)允許非嚴(yán)格定義的子集和超集。
Sets 支持嚴(yán)格( < )子集和非嚴(yán)格 ( <= ) 子集, 也支持嚴(yán)格( > )超集和非嚴(yán)格 ( >= )超集。只有當(dāng)?shù)谝粋€(gè)集合是第二個(gè)集合的嚴(yán)格子集時(shí),我們才稱(chēng)第一個(gè)集合“小于”第二個(gè)集合,同理,只有當(dāng)?shù)谝粋€(gè)集合是第二個(gè)集合的嚴(yán)格超集時(shí),我們才稱(chēng)第一個(gè)集合“大于”第二個(gè)集合。
>>> set("shop") < set("cheeseshop") True >>> set("bookshop") >= set("shop") True
(2)聯(lián)合|(等價(jià)于union())
兩個(gè)集合的聯(lián)合是一個(gè)新集合,該集合中的每個(gè)元素都至少是其中一個(gè)集合的成員,即,屬于兩個(gè)集合其中之一的成員。
>>> s=set("python") >>> t=set("hello") >>> s|t #等價(jià)于s.union(t) set(["p", "e", "t", "y", "h", "l", "o", "n"])
(3)交集&(等價(jià)于intersection())
兩個(gè)集合的交集是一個(gè)新集合,該集合中的每個(gè)元素同時(shí)是兩個(gè)集合中的成員,即,屬于兩個(gè)集合的成員。
>>> s=set("python") >>> t=set("hello") >>>s&t #等價(jià)于 s.intersection(t) set(["h", "o"])
(4)差補(bǔ)/相對(duì)補(bǔ)集(-)(等價(jià)于difference())
兩個(gè)集合(s 和 t)的差補(bǔ)或相對(duì)補(bǔ)集是指一個(gè)集合 C,該集合中的元素,只屬于集合 s,而不屬于集合 t。
>>> s set(["h", "o", "n", "p", "t", "y"]) >>> t set(["h", "e", "l", "o"]) >>> s-t set(["y", "p", "t", "n"])
(5)對(duì)稱(chēng)差分( ^ ) (等價(jià)于symmetric_difference())
兩個(gè)集合(s 和 t)的對(duì)稱(chēng)差分是指另外一個(gè)集合 C,該集合中的元素,只能是屬于集合 s 或者集合 t的成員,不能同時(shí)屬于兩個(gè)集合。
set(["h", "o", "n", "p", "t", "y"]) >>> t set(["h", "e", "l", "o"]) >>> s^t set(["e", "l", "n", "p", "t", "y"])
(6)?issuperset方法所用是判斷集合st1是否是集合st2的父集,如果是返回?True,否則返回False。
>>> s1=set([1,2,3,4]) >>> s2=set([2,3]) >>> s1.issuperset(s2)
True
(7)?issubset函數(shù)的作用是判斷集合s1是否是集合s2的子集,如果是返回True,否則返?回False。
>>> s1=set([1,2,3,4,5]) >>> s2=set([2,3]) >>> s2.issubset(s1) True
(8)?集合的成員運(yùn)算符
集合里也可以使用成員運(yùn)算符,in和not in,判斷某個(gè)對(duì)象是?否是集合中的成員。
s1 = set([“a”,”b”]) >>> "a" in s True >>> "x" in s False
(三)?不可變集合
Python中還有一種不可改變的集合,那就是?frozenset,不像set集合,可?以增加刪除集合中的元素,該集合中的內(nèi)容是不可改變的,類(lèi)似于字符串、?元組。如果試圖改變不可變集合中的元素,就會(huì)報(bào)AttributeError錯(cuò)誤。?不可變集合,除了內(nèi)容不能更改外,其他功能及操作跟可變集合set一樣
f1 = f1=frozenset("python") print f1 f2 = frozenset([1,2,3,2,44,3]) print f2
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/40895.html
摘要:并且集合中的元素也是隨機(jī)排序的。除了用來(lái)創(chuàng)建集合,還可以使用的方式,但是這種方式不提倡使用,因?yàn)樵谀承┣闆r下,搞不清楚是字典還是集合。集合不是序列類(lèi)型,不能用索引方式對(duì)其進(jìn)行修改和實(shí)現(xiàn)集合和列表兩種對(duì)象之間的轉(zhuǎn)化。 集合Set類(lèi)似字典的特點(diǎn),可以用{}花括號(hào)來(lái)定義;其中的元素是沒(méi)有序列,也就是非序列類(lèi)型的數(shù)據(jù);而且集合中的元素不可重復(fù),這就類(lèi)似于dict鍵。 創(chuàng)建集合 >>> s1 =...
摘要:數(shù)字在中,整型長(zhǎng)整型浮點(diǎn)數(shù)負(fù)數(shù)布爾值等都可以稱(chēng)之為數(shù)字類(lèi)型。數(shù)字類(lèi)型的復(fù)雜度整數(shù)比浮點(diǎn)數(shù)簡(jiǎn)單浮點(diǎn)數(shù)比復(fù)數(shù)簡(jiǎn)單。布爾類(lèi)型布爾類(lèi)型其實(shí)就是數(shù)字和的變種而來(lái),即真或假,實(shí)際上就是內(nèi)置的數(shù)字類(lèi)型的子類(lèi)而已。 上篇文章中我們簡(jiǎn)單的體驗(yàn)了Python語(yǔ)言基本概念與語(yǔ)法,那么在繼續(xù)深入下去的過(guò)程中,不妨先學(xué)習(xí)幾個(gè)常見(jiàn)的Python內(nèi)置數(shù)據(jù)類(lèi)型?這也是大部分Python教科書(shū)的學(xué)習(xí)目錄,由淺至深,慢慢...
摘要:和一樣可以將元素從集合中刪除,區(qū)別是如果元素不存在則不會(huì)報(bào)錯(cuò)。從集合中隨機(jī)刪除一個(gè)元素,并且返回該元素,如果集合為空則會(huì)報(bào)錯(cuò)用于清空集合。 集合的描述 集合是無(wú)序的、不重復(fù)的數(shù)據(jù)集合,它本身是可變的,但里面的元素是不可變類(lèi)型(這里要注意,即使是含有列表的元組也不可以,必須是完全不可變類(lèi)型) 創(chuàng)建集合 創(chuàng)建集合可以使用大括號(hào){}來(lái)創(chuàng)建,元素間用逗號(hào)分隔,但是不能用它來(lái)創(chuàng)建空集合,因?yàn)閧}...
摘要:遞歸列表可以使用遞歸函數(shù)最為自然地操作,就像它們的名稱(chēng)和結(jié)構(gòu)表示的那樣。處理遞歸列表遞歸列表結(jié)構(gòu)將列表表示為首個(gè)元素和列表的剩余部分的組合。例如,我們可以使用高階遞歸函數(shù)將樹(shù)的每個(gè)葉子平方,它的結(jié)構(gòu)類(lèi)似于。成員測(cè)試會(huì)遞歸遍歷整個(gè)列表。 3.3 遞歸數(shù)據(jù)結(jié)構(gòu) 來(lái)源:3.3 Recursive Data Structures 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 在第二...
摘要:布爾值布爾值和布爾代數(shù)的表示完全一致,一個(gè)布爾值只有兩種值的數(shù)據(jù)類(lèi)型可以通過(guò)內(nèi)置的函數(shù)查詢(xún),例如還可以用來(lái)判斷和的區(qū)別在于不會(huì)認(rèn)為子類(lèi)是一種父類(lèi)類(lèi)型。會(huì)認(rèn)為子類(lèi)是一種父類(lèi)類(lèi)型。基本功能是進(jìn)行成員關(guān)系測(cè)試和刪除重復(fù)元素。 ...
閱讀 1479·2021-09-02 09:53
閱讀 2730·2021-07-29 13:50
閱讀 1775·2019-08-30 11:07
閱讀 1626·2019-08-30 11:00
閱讀 1511·2019-08-29 14:00
閱讀 1911·2019-08-29 12:52
閱讀 2628·2019-08-29 11:11
閱讀 3484·2019-08-26 12:23