成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

python-數(shù)據(jù)類(lèi)型之set集合

mylxsw / 3008人閱讀

摘要:集合是中一種基本數(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

相關(guān)文章

  • Python基礎(chǔ)(四)集合

    摘要:并且集合中的元素也是隨機(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 =...

    CKJOKER 評(píng)論0 收藏0
  • Python全棧路系列數(shù)字數(shù)據(jù)類(lèi)型

    摘要:數(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í)目錄,由淺至深,慢慢...

    Developer 評(píng)論0 收藏0
  • Python基礎(chǔ)知識(shí)集合

    摘要:和一樣可以將元素從集合中刪除,區(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)閧}...

    libxd 評(píng)論0 收藏0
  • SICP Python 描述 3.3 遞歸數(shù)據(jù)結(jié)構(gòu)

    摘要:遞歸列表可以使用遞歸函數(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 在第二...

    libin19890520 評(píng)論0 收藏0
  • Python零基礎(chǔ)到入門(mén)】Python基礎(chǔ)語(yǔ)法篇——基本數(shù)據(jù)類(lèi)型【文末送書(shū)】

    摘要:布爾值布爾值和布爾代數(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ù)元素。 ...

    Winer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<