摘要:集合是中一種基本數據類型,它分為可變集合和不可變集合兩種。小于和大于意味著兩個集合在比較時不能相等。等于號允許非嚴格定義的子集和超集。函數的作用是判斷集合是否是集合的子集,如果是返回,否則返回。
集合set是Python中一種基本數據類型,它分為可變集合(set)和不可變集合(frozenset)兩種。類似于其他語言,集合是一個無序不重復元素集,包括創建集合set、向集合中添加元素、刪除集合中的元素、求集合的交集、并集、差集等操作
(一)集合的增刪改查
(1)集合的創建與賦值——唯一的方法工廠方法 set()和 frozenset()
>>> l=set() #空集合 >>> s=set("cheeseshop") #字符串作為參數 >>> s set(["c", "e", "h", "o", "p", "s"]) >>> s1 = set([1,2,3,1,3,4,5]) #list作為參數 >>> s1 set([1, 2, 3, 4]) >>> s2 = set((1,2,3,4,1)) #元組作為參數 >>> s2 set([1, 2, 3, 4]) >>> s3 = set({1:2,2:3}) #字典作為參數 >>> 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)更新集合
用各種集合內建的方法和操作符添加和刪除集合的成員:只有可變集合可以修改不可變集合不可以修改。
>>> 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 對象一樣,令集合超出它的作用范圍,或調用 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"])
方法二:先轉換成列表,再修改
>>> t=list(s) >>> t.append(49) >>> ss=set(t) >>> ss set([49, "add", "5", "4"])
?
setVar.discard(element)?
參數說明:?setVar :為一個set類型的變量?element :表示要查找并刪除的元素?函數作用:?在集合setVar中查找element元素,如果存在則刪除;如果沒找到,則什么也不做。該函數沒有返回值
>>> sList=set([1,2,3,4,5]) >>> sList.discard(1) >>> sList.discard(1) >>> print sList set([2, 3, 4, 5])
(5)轉換
集合與序列間的轉換
集合和序列之間的轉換跟序列之間互轉是一樣的,唯一不同?的就是序列轉成集合后,重復的元素被去掉了
>>> testStr="python is good" >>> st=set(testStr) >>> print st set([" ", "d", "g", "i", "h", "o", "n", "p", "s", "t", "y"])
集合轉字符串時,直接使用str()函?數進行轉換,得到的將是集合的字?符串形式。要想真正轉成字符串,?我們需要借助字符串連接函數?join()函數來完成。
>>> s1="".join(st) ? #但是是無序的 >>> s1 " dgihonpsty"
集合與列表互轉
>>> 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"]
元組與集合互轉
>>> 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是隨機的如果想刪除最后一個,如果想刪除最后一個元素時,如下:
先遍歷找到這個元素并記錄下最后一個數值通過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 支持嚴格( < )子集和非嚴格 ( <= ) 子集, 也支持嚴格( > )超集和非嚴格 ( >= )超集。只有當第一個集合是第二個集合的嚴格子集時,我們才稱第一個集合“小于”第二個集合,同理,只有當第一個集合是第二個集合的嚴格超集時,我們才稱第一個集合“大于”第二個集合。
>>> set("shop") < set("cheeseshop") True >>> set("bookshop") >= set("shop") True
(2)聯合|(等價于union())
兩個集合的聯合是一個新集合,該集合中的每個元素都至少是其中一個集合的成員,即,屬于兩個集合其中之一的成員。
>>> 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函數的作用是判斷集合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集合,可?以增加刪除集合中的元素,該集合中的內容是不可改變的,類似于字符串、?元組。如果試圖改變不可變集合中的元素,就會報AttributeError錯誤。?不可變集合,除了內容不能更改外,其他功能及操作跟可變集合set一樣
f1 = f1=frozenset("python") print f1 f2 = frozenset([1,2,3,2,44,3]) print f2
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40895.html
摘要:并且集合中的元素也是隨機排序的。除了用來創建集合,還可以使用的方式,但是這種方式不提倡使用,因為在某些情況下,搞不清楚是字典還是集合。集合不是序列類型,不能用索引方式對其進行修改和實現集合和列表兩種對象之間的轉化。 集合Set類似字典的特點,可以用{}花括號來定義;其中的元素是沒有序列,也就是非序列類型的數據;而且集合中的元素不可重復,這就類似于dict鍵。 創建集合 >>> s1 =...
摘要:數字在中,整型長整型浮點數負數布爾值等都可以稱之為數字類型。數字類型的復雜度整數比浮點數簡單浮點數比復數簡單。布爾類型布爾類型其實就是數字和的變種而來,即真或假,實際上就是內置的數字類型的子類而已。 上篇文章中我們簡單的體驗了Python語言基本概念與語法,那么在繼續深入下去的過程中,不妨先學習幾個常見的Python內置數據類型?這也是大部分Python教科書的學習目錄,由淺至深,慢慢...
摘要:和一樣可以將元素從集合中刪除,區別是如果元素不存在則不會報錯。從集合中隨機刪除一個元素,并且返回該元素,如果集合為空則會報錯用于清空集合。 集合的描述 集合是無序的、不重復的數據集合,它本身是可變的,但里面的元素是不可變類型(這里要注意,即使是含有列表的元組也不可以,必須是完全不可變類型) 創建集合 創建集合可以使用大括號{}來創建,元素間用逗號分隔,但是不能用它來創建空集合,因為{}...
摘要:遞歸列表可以使用遞歸函數最為自然地操作,就像它們的名稱和結構表示的那樣。處理遞歸列表遞歸列表結構將列表表示為首個元素和列表的剩余部分的組合。例如,我們可以使用高階遞歸函數將樹的每個葉子平方,它的結構類似于。成員測試會遞歸遍歷整個列表。 3.3 遞歸數據結構 來源:3.3 Recursive Data Structures 譯者:飛龍 協議:CC BY-NC-SA 4.0 在第二...
摘要:布爾值布爾值和布爾代數的表示完全一致,一個布爾值只有兩種值的數據類型可以通過內置的函數查詢,例如還可以用來判斷和的區別在于不會認為子類是一種父類類型。會認為子類是一種父類類型。基本功能是進行成員關系測試和刪除重復元素。 ...
閱讀 1399·2021-09-02 09:53
閱讀 2667·2021-07-29 13:50
閱讀 1715·2019-08-30 11:07
閱讀 1571·2019-08-30 11:00
閱讀 1450·2019-08-29 14:00
閱讀 1844·2019-08-29 12:52
閱讀 2560·2019-08-29 11:11
閱讀 3415·2019-08-26 12:23