摘要:集合是中一種基本數(shù)據(jù)類型,它分為可變集合和不可變集合兩種。小于和大于意味著兩個集合在比較時不能相等。等于號允許非嚴格定義的子集和超集。函數(shù)的作用是判斷集合是否是集合的子集,如果是返回,否則返回。
集合set是Python中一種基本數(shù)據(jù)類型,它分為可變集合(set)和不可變集合(frozenset)兩種。類似于其他語言,集合是一個無序不重復(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)訪問集合的值
遍歷查看集合成員或檢查某項元素是否是一個集合中的成員:
>>> 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 對象一樣,令集合超出它的作用范圍,或調(diào)用 del 將他們直接清除出當前的名字空間。
>>> 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"
集合的替換:(沒有修改,只有先刪除再增加)
方法一:先刪除再增加
>>> 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ù)說明:?setVar :為一個set類型的變量?element :表示要查找并刪除的元素?函數(shù)作用:?在集合setVar中查找element元素,如果存在則刪除;如果沒找到,則什么也不做。該函數(shù)沒有返回值
>>> 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)字符串時,直接使用str()函?數(shù)進行轉(zhuǎn)換,得到的將是集合的字?符串形式。要想真正轉(zhuǎn)成字符串,?我們需要借助字符串連接函數(shù)?join()函數(shù)來完成。
>>> s1="".join(st) ? #但是是無序的 >>> 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是隨機的如果想刪除最后一個,如果想刪除最后一個元素時,如下:
先遍歷找到這個元素并記錄下最后一個數(shù)值通過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
(二)集合的類型操作符
(1)子集超集
“小于”符號( <, <= )用來判斷子集
“大于”符號( >, >= )用來判斷超集。
“小于” 和 “大于”意味著兩個集合在比較時不能相等。等于號允許非嚴格定義的子集和超集。
Sets 支持嚴格( < )子集和非嚴格 ( <= ) 子集, 也支持嚴格( > )超集和非嚴格 ( >= )超集。只有當?shù)谝粋€集合是第二個集合的嚴格子集時,我們才稱第一個集合“小于”第二個集合,同理,只有當?shù)谝粋€集合是第二個集合的嚴格超集時,我們才稱第一個集合“大于”第二個集合。
>>> set("shop") < set("cheeseshop") True >>> set("bookshop") >= set("shop") True
(2)聯(lián)合|(等價于union())
兩個集合的聯(lián)合是一個新集合,該集合中的每個元素都至少是其中一個集合的成員,即,屬于兩個集合其中之一的成員。
>>> s=set("python") >>> t=set("hello") >>> s|t #等價于s.union(t) set(["p", "e", "t", "y", "h", "l", "o", "n"])
(3)交集&(等價于intersection())
兩個集合的交集是一個新集合,該集合中的每個元素同時是兩個集合中的成員,即,屬于兩個集合的成員。
>>> s=set("python") >>> t=set("hello") >>>s&t #等價于 s.intersection(t) set(["h", "o"])
(4)差補/相對補集(-)(等價于difference())
兩個集合(s 和 t)的差補或相對補集是指一個集合 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)對稱差分( ^ ) (等價于symmetric_difference())
兩個集合(s 和 t)的對稱差分是指另外一個集合 C,該集合中的元素,只能是屬于集合 s 或者集合 t的成員,不能同時屬于兩個集合。
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)?集合的成員運算符
集合里也可以使用成員運算符,in和not in,判斷某個對象是?否是集合中的成員。
s1 = set([“a”,”b”]) >>> "a" in s True >>> "x" in s False
(三)?不可變集合
Python中還有一種不可改變的集合,那就是?frozenset,不像set集合,可?以增加刪除集合中的元素,該集合中的內(nèi)容是不可改變的,類似于字符串、?元組。如果試圖改變不可變集合中的元素,就會報AttributeError錯誤。?不可變集合,除了內(nèi)容不能更改外,其他功能及操作跟可變集合set一樣
f1 = f1=frozenset("python") print f1 f2 = frozenset([1,2,3,2,44,3]) print f2
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40895.html
摘要:并且集合中的元素也是隨機排序的。除了用來創(chuàng)建集合,還可以使用的方式,但是這種方式不提倡使用,因為在某些情況下,搞不清楚是字典還是集合。集合不是序列類型,不能用索引方式對其進行修改和實現(xiàn)集合和列表兩種對象之間的轉(zhuǎn)化。 集合Set類似字典的特點,可以用{}花括號來定義;其中的元素是沒有序列,也就是非序列類型的數(shù)據(jù);而且集合中的元素不可重復(fù),這就類似于dict鍵。 創(chuàng)建集合 >>> s1 =...
摘要:數(shù)字在中,整型長整型浮點數(shù)負數(shù)布爾值等都可以稱之為數(shù)字類型。數(shù)字類型的復(fù)雜度整數(shù)比浮點數(shù)簡單浮點數(shù)比復(fù)數(shù)簡單。布爾類型布爾類型其實就是數(shù)字和的變種而來,即真或假,實際上就是內(nèi)置的數(shù)字類型的子類而已。 上篇文章中我們簡單的體驗了Python語言基本概念與語法,那么在繼續(xù)深入下去的過程中,不妨先學(xué)習幾個常見的Python內(nèi)置數(shù)據(jù)類型?這也是大部分Python教科書的學(xué)習目錄,由淺至深,慢慢...
摘要:和一樣可以將元素從集合中刪除,區(qū)別是如果元素不存在則不會報錯。從集合中隨機刪除一個元素,并且返回該元素,如果集合為空則會報錯用于清空集合。 集合的描述 集合是無序的、不重復(fù)的數(shù)據(jù)集合,它本身是可變的,但里面的元素是不可變類型(這里要注意,即使是含有列表的元組也不可以,必須是完全不可變類型) 創(chuàng)建集合 創(chuàng)建集合可以使用大括號{}來創(chuàng)建,元素間用逗號分隔,但是不能用它來創(chuàng)建空集合,因為{}...
摘要:遞歸列表可以使用遞歸函數(shù)最為自然地操作,就像它們的名稱和結(jié)構(gòu)表示的那樣。處理遞歸列表遞歸列表結(jié)構(gòu)將列表表示為首個元素和列表的剩余部分的組合。例如,我們可以使用高階遞歸函數(shù)將樹的每個葉子平方,它的結(jié)構(gòu)類似于。成員測試會遞歸遍歷整個列表。 3.3 遞歸數(shù)據(jù)結(jié)構(gòu) 來源:3.3 Recursive Data Structures 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 在第二...
摘要:布爾值布爾值和布爾代數(shù)的表示完全一致,一個布爾值只有兩種值的數(shù)據(jù)類型可以通過內(nèi)置的函數(shù)查詢,例如還可以用來判斷和的區(qū)別在于不會認為子類是一種父類類型。會認為子類是一種父類類型?;竟δ苁沁M行成員關(guān)系測試和刪除重復(fù)元素。 ...
閱讀 1414·2021-09-02 09:53
閱讀 2677·2021-07-29 13:50
閱讀 1726·2019-08-30 11:07
閱讀 1583·2019-08-30 11:00
閱讀 1461·2019-08-29 14:00
閱讀 1853·2019-08-29 12:52
閱讀 2572·2019-08-29 11:11
閱讀 3429·2019-08-26 12:23