組合數(shù)據(jù)類型課件_第1頁(yè)
組合數(shù)據(jù)類型課件_第2頁(yè)
組合數(shù)據(jù)類型課件_第3頁(yè)
組合數(shù)據(jù)類型課件_第4頁(yè)
組合數(shù)據(jù)類型課件_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2022/7/29第3章 組合數(shù)據(jù)類型主 講 人:第1頁(yè),共93頁(yè)。目錄2022/7/2921. 列表2. 元組3. 字典4. 集合5. 組合數(shù)據(jù)類型的高級(jí)特性第2頁(yè),共93頁(yè)。2022/7/291.列表 Python內(nèi)置的一種數(shù)據(jù)類型是列表(list) 。list是一種最具靈活性的有序集合對(duì)象類型,可以隨時(shí)添加和刪除其中的元素。第3頁(yè),共93頁(yè)。2022/7/291.列表1.1創(chuàng)建列表通常使用左右方括號(hào)(即: 和 )將數(shù)據(jù)元素包裹起來(lái)創(chuàng)建一個(gè)列表,如下所示。其中列表list1中包含5個(gè)元素,分別是1、2、3、4、5,list1為列表名。這種創(chuàng)建列表的方式適用于對(duì)于列表中元素個(gè)數(shù)及其數(shù)值已知時(shí)

2、。 List1=1,2,3,4,5 List2=a,b,c,d第4頁(yè),共93頁(yè)。2022/7/291.列表1.1創(chuàng)建列表當(dāng)遇到如將一個(gè)元組(參考3.2節(jié))轉(zhuǎn)換為列表時(shí),則需要使用另外一種方法創(chuàng)建列表調(diào)用list(tuple)函數(shù),該函數(shù)返回一個(gè)包含tuple中所有元素的列表。注:直接調(diào)用不帶參的list()函數(shù)時(shí),將返回一個(gè)空列表,即: 。第5頁(yè),共93頁(yè)。2022/7/291.列表1.1創(chuàng)建列表列表中的元素的數(shù)據(jù)類型可以各不相同,如int,string類型,甚至可以是一個(gè)列表類型,如在下例中10,20為一個(gè)list類型,它作為list3的一個(gè)元素存在于list3中。 List3=marry,

3、2.0,5,10,20 List3marry, 2.0, 5, 10, 20第6頁(yè),共93頁(yè)。2022/7/291.列表1.1創(chuàng)建列表如圖3-1所示,列表的下標(biāo)是從0開始,List3列表的第一個(gè)元素是marry,用L0可以表示L的第一個(gè)元素,第二個(gè)元素是2.0,用L1表示,以此類推,第四個(gè)元素是一個(gè)列表,即10, 20。圖3-1 元組索引位置第7頁(yè),共93頁(yè)。2022/7/291.列表1.2讀取元素元素下標(biāo)表示該元素在list中的位置。注意list中元素下標(biāo)是從0開始的,如第n個(gè)元素下標(biāo)為n-1。但當(dāng)讀取元素傳入的元素下標(biāo)超出list集合的大小時(shí)將會(huì)報(bào)“元素下標(biāo)超出范圍”的錯(cuò)誤。第8頁(yè),共93

4、頁(yè)。2022/7/291.列表1.2讀取元素 List2=a,b,c,d List20 #訪問(wèn)列表的第一個(gè)元素a List21 #訪問(wèn)列表的第二個(gè)元素b List25 #超出列表元素下標(biāo),報(bào)錯(cuò)Traceback (most recent call last): File , line 1, in List25IndexError: list index out of range由于list2的長(zhǎng)度為4,在取第5個(gè)元素時(shí),list2中元素的最大下標(biāo)為3 List2-1d List2-2c List2-3b List2-5 #超出列表元素下標(biāo),報(bào)錯(cuò)Traceback (most recent ca

5、ll last): File , line 1, in List2-5IndexError: list index out of range除了正向取list中的元素外,也可以逆向去取,用元素下標(biāo)-1表示最后一個(gè)元素,-2表示倒數(shù)第二個(gè)元素,同樣注意不能超出元組個(gè)數(shù)的界限,例如:。第10頁(yè),共93頁(yè)。2022/7/291.列表1.3遍歷列表 for cheese in cheeses:print(cheese) 遍歷一個(gè)列表元素的最常見方式是使用for循環(huán),常見的有以下兩種方式。第一種遍歷方法隱藏了列表cheeses的長(zhǎng)度,操作較為便利。第11頁(yè),共93頁(yè)。2022/7/291.列表1.3遍歷

6、列表 for i in range(len(numbers):numbersi=numbersi *2第二種遍歷方法則使用len()函數(shù)計(jì)算出列表numbers的長(zhǎng)度后進(jìn)行遍歷操作,其中range()函數(shù)返回的是從0到numbers長(zhǎng)度的數(shù)值序列。第12頁(yè),共93頁(yè)。2022/7/291.列表1.4替換元素 numbers=12,13 numbers1=14 numbers 12, 14 和字符串不同的是,列表是可變的,可以在列表中指定下標(biāo)的值對(duì)元素進(jìn)行修改,例如:numbers1原先為13,當(dāng)執(zhí)行 numbers1=14 時(shí),numbers1的值被修改為14。第13頁(yè),共93頁(yè)。2022/7

7、/291.列表1.5增加元素 list=1 list=list+a, b list1, a, b*操作符重復(fù)一個(gè)列表多次: 0*50, 0, 0, 0, 0 4,5,6 *44, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6方法一:使用“+”將一個(gè)新列表附加在原列表的尾部。例如:和字符串不同的是,列表是可變的,可以在列表中指定下標(biāo)的值對(duì)元素進(jìn)行修改,例如:第14頁(yè),共93頁(yè)。2022/7/291.列表1.5增加元素 list.append(True) list1, a, b, True方法二:使用append()方法向列表的尾部添加一個(gè)新元素。例如: list.extend(

8、c,5) list1, a, b, True, c, 5方法三:使用extend()方法將一個(gè)列表添加在原列表的尾部。例如:第15頁(yè),共93頁(yè)。2022/7/291.列表1.5增加元素 list.insert(0,x) listx, 1, a, b, True, c, 5方法四:使用insert()方法將一個(gè)元素插入到列表的指定位置。該方法有兩個(gè)參數(shù),第一個(gè)參數(shù)為插入位置,第二個(gè)參數(shù)為插入元素。例如:第16頁(yè),共93頁(yè)。2022/7/291.列表1.6檢索元素 list=x,y,a,b,True,x list.count(x)2 使用count()方法計(jì)算列表中某個(gè)元素出現(xiàn)的次數(shù)。 3 in

9、listFalse x in listTrue使用in運(yùn)算符檢查某個(gè)元素是否在列表中。第17頁(yè),共93頁(yè)。2022/7/291.列表1.6檢索元素使用index()方法返回某個(gè)元素在列表中的準(zhǔn)確位置,若該元素不在列表中將會(huì)出錯(cuò)。值得注意的是,若使用該方法的元素在該列表中存在相同項(xiàng),則返回顯示最小index的位置,如list.index(x),存在兩個(gè)x,則只顯示最小位置。 list.index(x)0第18頁(yè),共93頁(yè)。1.列表1.7刪除元素方法一:使用del語(yǔ)句刪除某個(gè)特定位置的元素。 list=x,y,a,b,True,x del list1 listx, a, b, True, x第19

10、頁(yè),共93頁(yè)。1.列表1.7刪除元素方法二:使用remove()方法刪除某個(gè)特定值的元素。remove(x)從list中移除最左邊出現(xiàn)的數(shù)據(jù)項(xiàng)x,如果找不到x就產(chǎn)生ValueError。 list=x,y,a,b,True,x list.remove(x) listy, a, b,True, x list.remove(x) listy, a, b,True list.remove(x)Traceback (most recent call last): File , line 1, in list.remove(x)ValueError: list.remove(x): x not in l

11、ist第20頁(yè),共93頁(yè)。1.列表1.7刪除元素方法三:使用pop()方法來(lái)彈出(刪除)指定位置的元素,缺省參數(shù)時(shí)彈出最后一個(gè)元素。彈出空數(shù)組將會(huì)報(bào)錯(cuò)。 list=x,y,a,b,True,x list.pop()x listx, y, a, b, True list.pop(1)y listx, a, b, True list.pop(1)a第21頁(yè),共93頁(yè)。1.列表1.7刪除元素 list.pop(1)b list.pop(1)True list.pop()x list list.pop()Traceback (most recent call last): File , line 1,

12、 in list.pop()IndexError: pop from empty list接上一頁(yè)P(yáng)PT第22頁(yè),共93頁(yè)。1.列表1.8字符串和列表的轉(zhuǎn)化 s=Micheal t=list(s) tM, i, c, h, e, a, l字符串是字符的序列,而列表是值的序列,但字符的列表和字符串并不相同。若要將一個(gè)字符串轉(zhuǎn)化為一個(gè)字符的列表,可以使用函數(shù)list。第23頁(yè),共93頁(yè)。1.列表1.8字符串和列表的轉(zhuǎn)化 s=you are so beautiful t=s.split() tyou, are, so, beautiful由于list是內(nèi)置函數(shù)的名稱,所以應(yīng)當(dāng)盡量避免使用它作為變量名

13、稱。list函數(shù)會(huì)將字符串拆成單個(gè)的字母。如果想要將字符串拆成單詞,可以使用split方法。第24頁(yè),共93頁(yè)。1.列表1.8字符串和列表的轉(zhuǎn)化 u=www.studyP d=u.split() dwww.studyP但是下面的例子卻失敗了,輸出了整個(gè)列表。 u=www.studyP c=u.split(.) cwww, studyPython, com, cn這時(shí)候就要用split接受一個(gè)可選的形參,作為分隔符,用于指定用哪個(gè)字符來(lái)分割單詞。例如上面的例子可以用一個(gè)“.”作為分隔符,如下所示。第25頁(yè),共93頁(yè)。1.列表1.8字符串和列表的轉(zhuǎn)化join是split的逆操作。它接收字符串列表,

14、并拼接每個(gè)元素。join是字符串的方法,所以必須在分隔符上調(diào)用它,并傳入列表作為實(shí)參。 t=you,are,so,beautifil s= .join(t) syou are so beautifil第26頁(yè),共93頁(yè)。1.列表1.8列表的常用函數(shù)cmp()格式:cmp(列表1,列表2)。功能:對(duì)兩個(gè)列表進(jìn)行比較,若第一個(gè)列表大于第二個(gè),則結(jié)果為1,相反則為-1,元素完全相同則結(jié)果為0。 list1=123,xyz list2=123,abc cmp(list1,list2)1 cmp(list2,list1)-1 list2=list1 cmp(list1,list2)0第27頁(yè),共93頁(yè)。

15、1.列表1.8列表的常用函數(shù)len()格式:len(列表)。功能:返回列表中的元素個(gè)數(shù)。 len(list1) 2第28頁(yè),共93頁(yè)。1.列表1.8列表的常用函數(shù)max()和min()格式:max(列表) min(列表)。功能:返回列表中的最大或最小元素。 str_l=abc,xyz,123 num_l=123,456,222 max(str_l)xyz min(str_l)123 max(num_l)456 min(num_l)123第29頁(yè),共93頁(yè)。1.列表1.8列表的常用函數(shù)sorted()和resersed()格式:sorted(列表) reversed(列表)。功能:前者的功能是對(duì)

16、列表進(jìn)行排序,默認(rèn)是按升序排序,還可在列表的后面增加一個(gè)reverse參數(shù),其等于True則表示按降序排序;后者的功能是對(duì)列表進(jìn)行逆序。 list=1,4,3,6,9,0,2 for x in reversed(list): print x,2 0 9 6 3 4 1 sorted(list)0, 1, 2, 3, 4, 6, 9 sorted(list,reverse=True)9, 6, 4, 3, 2, 1, 0第30頁(yè),共93頁(yè)。1.列表1.8列表的常用函數(shù)sum()格式:sum(列表)。功能:對(duì)數(shù)值型列表的元素進(jìn)行求和運(yùn)算,對(duì)非數(shù)值型列表運(yùn)算則出錯(cuò)。 sum(list)25 sum(

17、str_l)Traceback (most recent call last): File , line 1, in sum(str_l)TypeError: unsupported operand type(s) for +: int and str第31頁(yè),共93頁(yè)。目錄2022/7/2921. 列表2. 元組3. 字典4. 集合5. 組合數(shù)據(jù)類型的高級(jí)特性第32頁(yè),共93頁(yè)。2.元組元組(tuple)是值的一個(gè)序列。其中的值可以是任何類型,并且按照整數(shù)下標(biāo)索引,與列表類似。但元組中的元素不能修改,列表中的元素可以修改。第33頁(yè),共93頁(yè)。2.元組2.1元組與列表的區(qū)別元組基本上都是不可改

18、變的列表。元組幾乎具有列表所有的特性,除開那些違反不變性的特征。也就是說(shuō),沒(méi)有函數(shù)和方法可以改變?cè)M。不可變的tuple有什么意義?因?yàn)閠uple不可變,所以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。當(dāng)后續(xù)介紹字典類型時(shí),會(huì)發(fā)現(xiàn)字典的鍵必須是不可變的,因此元組可以用作字典的鍵,但列表不能。第34頁(yè),共93頁(yè)。2.元組2.1元組與列表的區(qū)別語(yǔ)法上,元組就是用逗號(hào)分隔的一列值,使用“=”將元組賦給變量。 tuple1=a,1,boy雖然并不必需,但元組常常用括號(hào)括起來(lái)。 tuple1=(a,1,boy) tuple1(a, 1, boy)第35頁(yè),共93頁(yè)。2.元組2.1

19、元組與列表的區(qū)別新建元組的另一種形式是使用內(nèi)置函數(shù)tuple。不帶參數(shù)時(shí),它會(huì)新建一個(gè)空元組。 t=tuple() t()第36頁(yè),共93頁(yè)。2.元組2.1元組與列表的區(qū)別則定義的不是tuple,是1這個(gè)數(shù)!這是因?yàn)槔ㄌ?hào)()既可以表示tuple,又可以表示數(shù)學(xué)公式中的小括號(hào),這就產(chǎn)生了歧義。因此,Python規(guī)定,這種情況下,按小括號(hào)進(jìn)行計(jì)算,計(jì)算結(jié)果自然是1。所以,只有一個(gè)元素的tuple定義時(shí)必須加一個(gè)逗號(hào)“,”來(lái)消除歧義,即: t = (1,) t(1,)但是,要定義一個(gè)只有一個(gè)元素的tuple,例如: t = (1) t1第37頁(yè),共93頁(yè)。2.元組2.1元組與列表的區(qū)別其他序列(列表

20、和字符串)的操作都可用于元組,除了那些會(huì)違反不變性的列表運(yùn)算符?!?”和“*”運(yùn)算符同樣適用于元組。成員操作(in)和for循環(huán)同樣適用于元組長(zhǎng)度(len)、最大(max)和最?。╩in)同樣適用于元組。沒(méi)有任何的操作能更改元組。例如append、extend、insert、remove、pop、reverse和sort不能用于元組。第38頁(yè),共93頁(yè)。2.元組2.2元組的常用操作由于元組和列表比較相似,使得對(duì)列表的很多操作如“+”、“*”等運(yùn)算符以及長(zhǎng)度(len)、最大(max)、最?。╩in)等運(yùn)算都適用于元組。而那些如append、extend、insert、remove、pop、rev

21、erse和sort等能改變?cè)氐牟僮鞫疾荒苤苯硬僮髟M。然而,當(dāng)元組中存在列表元素項(xiàng)時(shí),就可以使用上述如append等方法修改list中的元素,達(dá)到間接修改元組元素的目的。第39頁(yè),共93頁(yè)。2.元組2.3元組的常用函數(shù)元組的常用函數(shù)與列表類似,除了那些會(huì)違反不變性的函數(shù)。語(yǔ) 法描 述cmp(tuple1, tuple2)比較兩個(gè)元組元素len(tuple)計(jì)算元組元素個(gè)數(shù)max(tuple)返回元組中元素最大值min(tuple)返回元組中元素最小值tuple(seq)將列表轉(zhuǎn)換為元組表3-1元組的常用函數(shù)第40頁(yè),共93頁(yè)。目錄2022/7/2921. 列表2. 元組3. 字典4. 集合5

22、. 組合數(shù)據(jù)類型的高級(jí)特性第41頁(yè),共93頁(yè)。3.字典字典是一種集合,它不是序列。字典可以看成元素對(duì)構(gòu)成的列表,其中一個(gè)元素是鍵,另一個(gè)元素是值。在搜索字典時(shí),首先查找鍵,當(dāng)查找到鍵后就可以直接獲取該鍵對(duì)應(yīng)的值,效率很高,是一種高效的查找方法。第42頁(yè),共93頁(yè)。3.字典3.1創(chuàng)建字典與列表、元組不同的是,字典是以“”和“”定義的,而且字典中每個(gè)元素包含兩個(gè)部分,即鍵和值。下面給出了一些實(shí)例,展示了各種語(yǔ)法,這些語(yǔ)法產(chǎn)生的是相同的字典。第43頁(yè),共93頁(yè)。3.字典3.1創(chuàng)建字典 d1=dict(id:19,name:Marry,city:chongqing) d2=dict(id=19,nam

23、e=Marry,city=chongqing) d3=dict(id,19),(nmae,Marry),(city,chongqing) d4=dict(zip(id,name,city),(19,Marry,chongqing) d5=id:19,name:Marry,city:chongqing d1name: Marry, id: 19, city: chongqing d2name: Marry, id: 19, city: chongqing d3name: Marry, id: 19, city: chongqing d4name: Marry, id: 19, city: cho

24、ngqing d5name: Marry, id: 19, city: chongqing第44頁(yè),共93頁(yè)。3.字典3.2查找與反向查找 d1id19 d1nameMarry d1chongqingTraceback (most recent call last): File , line 1, in d1chongqingKeyError: chongqing字典定義好后,可以通過(guò)鍵來(lái)查找值,這個(gè)操作稱為“查找”。第45頁(yè),共93頁(yè)。3.字典3.2查找與反向查找 def reverse_lookup(d,v):for k in d:if dk=v:return kraise LookupE

25、rror()對(duì)于字典的操作通常是通過(guò)鍵來(lái)查找值,而能不能通過(guò)一個(gè)給定的值來(lái)確定其鍵呢?由于字典是一對(duì)多的關(guān)系,即一個(gè)鍵可能對(duì)應(yīng)多個(gè)值,若想根據(jù)一個(gè)值來(lái)確定其鍵時(shí),只能通過(guò)暴力搜索的方法。下面給出一個(gè)簡(jiǎn)單的暴力搜索實(shí)例,該段代碼接收一個(gè)值,并返回映射到該值的鍵:第46頁(yè),共93頁(yè)。3.字典3.3遍歷字典 for key in d1.keys():print(key,d1key)name Marryid 19city Chongqing用循環(huán)語(yǔ)句來(lái)遍歷字典中的每個(gè)元素的鍵和值,如下所示:第47頁(yè),共93頁(yè)。3.字典3.4添加和修改字典 d1name=jason d1name: jason, id:

26、 19, city: chongqing d1sex=female d1sex: female, name: jason, id: 19, city: chongqing字典的大小和列表都是動(dòng)態(tài)的,即不需要事先指定其容量大小,可以隨時(shí)向字典中添加新的鍵值對(duì),或者修改現(xiàn)有鍵所關(guān)聯(lián)的值。添加和修改的方法相同,都是使用“字典變量名鍵名=鍵值”的形式,主要區(qū)分在于字典中是否已存在該鍵值對(duì),若存在則為修改,否則為添加。例如:第48頁(yè),共93頁(yè)。3.字典3.4添加和修改字典 d1name=jason d1name: jason, id: 19, city: chongqing d1sex=female d

27、1sex: female, name: jason, id: 19, city: chongqing例如:d1=dict(id:19,name:Marry,city:chongqing),d1中已經(jīng)存在name鍵值對(duì),所以第一個(gè)操作是“修改”。d1中原本不存在sex鍵值對(duì),所以第二個(gè)操作是“添加”。因?yàn)樽值涫菬o(wú)序的,類似于append在尾部添加鍵值對(duì)的方法是沒(méi)有任何意義的。第49頁(yè),共93頁(yè)。3.字典3.5字典長(zhǎng)度 len(d1)4與列表、元組相同,可以用len()函數(shù)返回字典中鍵的數(shù)量,如下所示。第50頁(yè),共93頁(yè)。3.字典3.6字典檢索 id in d1True name in d1Tru

28、e NO in d1False可以使用in運(yùn)行符來(lái)測(cè)試某個(gè)特定的鍵是否在字典中。表達(dá)式k in d(d為字典)查找的是鍵,而不是值。第51頁(yè),共93頁(yè)。3.字典3.6字典檢索 d1=sex: female, name: jason, id: 19, city: chongqing vals=d1.values() jason in valsTrue查看一個(gè)值是不是出現(xiàn)在字典中,可以使用方法values,它返回該字典的所有值的一個(gè)集合,然后檢索當(dāng)前值是否在集合中即可,例如:第52頁(yè),共93頁(yè)。3.字典3.7刪除元素和字典可以使用del語(yǔ)句刪除指定鍵的元素或整個(gè)字典;使用clear()方法來(lái)刪除字

29、典中所有元素;使用pop ()方法刪除并返回指定鍵的元素;popitem()彈出隨機(jī)的項(xiàng)。第53頁(yè),共93頁(yè)。3.字典3.8字典的常用函數(shù)copy():返回一個(gè)具有相同鍵值對(duì)的新字典,該新字典是原來(lái)字典的一個(gè)副本(這個(gè)方法實(shí)現(xiàn)的是淺拷貝) 。fromkeys():使用給定的鍵建立新的字典,每個(gè)默認(rèn)對(duì)應(yīng)的值為None。get():get方法是一個(gè)更寬松的訪問(wèn)字典項(xiàng)的方法。一般來(lái)說(shuō),如果試圖訪問(wèn)字典中不存在的項(xiàng)時(shí)會(huì)出錯(cuò)。items():items方法將所有的字典項(xiàng)以列表的方式返回,這些列表項(xiàng)中的每一項(xiàng)都來(lái)自于(鍵,值)。第54頁(yè),共93頁(yè)。3.字典3.8字典的常用函數(shù)keys():將字典中的鍵以列

30、表形式返回。setdefault():能夠獲得與給定鍵相關(guān)聯(lián)的值,除此之外,setdefault還能在字典中不含有給定鍵的情況下設(shè)定相應(yīng)的鍵值。update():利用一個(gè)字典項(xiàng)更新另一個(gè)字典,若有相同的鍵存在,則會(huì)進(jìn)行覆蓋。第55頁(yè),共93頁(yè)。目錄2022/7/2921. 列表2. 元組3. 字典4. 集合5. 組合數(shù)據(jù)類型的高級(jí)特性第56頁(yè),共93頁(yè)。4.集合集合(set)是0個(gè)或多個(gè)對(duì)象引用的無(wú)序組合,這些對(duì)象所引用的對(duì)象都是可哈希運(yùn)算的。集合是可變的,因此可以很容易地添加或移除數(shù)據(jù)項(xiàng),但由于其中的項(xiàng)是無(wú)序的,因此,沒(méi)有索引位置的概念。在集合中,任何元素都沒(méi)有重復(fù),這是集合的一個(gè)非常重要的

31、特點(diǎn)。set和dict類似,是一組key的集合,但不存儲(chǔ)value,且在set中沒(méi)有重復(fù)的key。第57頁(yè),共93頁(yè)。4.集合4.1創(chuàng)建集合可以通過(guò)調(diào)用集合的構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)集合。和前文許多其他數(shù)據(jù)結(jié)構(gòu)不同,創(chuàng)建集合沒(méi)有快捷方式。因此,要?jiǎng)?chuàng)建集合,必須使用set構(gòu)造函數(shù)。set構(gòu)造函數(shù)至多有一個(gè)參數(shù)。如果沒(méi)有參數(shù),set會(huì)創(chuàng)建空集。如果有一個(gè)參數(shù),那么參數(shù)必須是可迭代的,例如字符串或列表,可迭代對(duì)象的元素將生成集合的成員。第58頁(yè),共93頁(yè)。4.集合4.1創(chuàng)建集合沒(méi)有參數(shù),set會(huì)創(chuàng)建空集。 nullSet=set() nullSetset()提供一個(gè)str作為輸入集合,創(chuàng)建一個(gè)set。 a

32、_set=set(abcd) a_seta, c, b, d提供一個(gè)list作為輸入集合,創(chuàng)建一個(gè)set。 s = set(1, 2, 3) s1, 2, 3重復(fù)元素在set中自動(dòng)被過(guò)濾。 s = set(1, 1, 2, 2, 3, 3) s1, 2, 3第59頁(yè),共93頁(yè)。4.集合4.2添加元素通過(guò)add(key)方法可以添加元素到set中,可以重復(fù)添加,但不會(huì)有效果。例如: s.add(4) s1, 2, 3, 4 s.add(4) s1, 2, 3, 4第60頁(yè),共93頁(yè)。4.集合4.3刪除元素通過(guò)remove(key)方法可以刪除元素。例如:discard(key)也可刪除元素,不同

33、的是,如果刪除的元素不在集合中,remove會(huì)報(bào)錯(cuò),discard不會(huì)報(bào)錯(cuò)。例如:clear()刪除集合的所有元素(使它成為空集)。第61頁(yè),共93頁(yè)。4.集合4.4典型的集合運(yùn)算符len():和所有集合類型一樣,len函數(shù)可以確定集合中的元素?cái)?shù)量。in:判斷某元素是否在集合中。in運(yùn)算符根據(jù)元素是否在集合中返回布爾值True或False。for:和所有集合類型一樣,for語(yǔ)句能遍歷集合中的元素。第62頁(yè),共93頁(yè)。4.集合4.5典型的數(shù)學(xué)集合運(yùn)算交集 s1 = set(1, 2, 3) s2 = set(2, 3, 4) ersection(s2)2, 3 s1 & s2 2, 3第63頁(yè),

34、共93頁(yè)。4.集合4.5典型的數(shù)學(xué)集合運(yùn)算并集 s1.union(s2)1, 2, 3, 4 s1 | s21, 2, 3, 4第64頁(yè),共93頁(yè)。4.集合4.5典型的數(shù)學(xué)集合運(yùn)算差集 s1.difference(s2)1 s2.difference(s1)4 s1-s21 s2-s1 4第65頁(yè),共93頁(yè)。4.集合4.5典型的數(shù)學(xué)集合運(yùn)算對(duì)稱差 s1.symmetric_difference(s2)1, 4 s2.symmetric_difference(s1)1, 4第66頁(yè),共93頁(yè)。4.集合4.5典型的數(shù)學(xué)集合運(yùn)算子集和超集 sSet=set(1,2,3) bSet=set(1,2,3

35、,4,5,6) sSet.issubset(bSet)True bSet.issubset(sSet)False sSet.issuperset(bSet) False bSet.issuperset(sSet)True sSet.issubset(sSet) True sSet.issuperset(sSet) True第67頁(yè),共93頁(yè)。4.集合4.6集合的常用函數(shù)前一小節(jié)集合的常用操作已經(jīng)把集合的用法介紹得差不多了,這里就補(bǔ)充幾個(gè)集合的常用函數(shù),如表3-2所示。語(yǔ) 法描 述s.copy()返回一個(gè)新集合,它是集合s的淺拷貝s.update(t)用t中的元素修改s,即s現(xiàn)在包含s或t的成員

36、ersection_update(t)s中的成員是共同屬于s和t的元素s.symmetric_difference_update(t)s中的成員更新為那些包含在s或t中,但不是s和t共有的元素表3-2集合的常用函數(shù)第68頁(yè),共93頁(yè)。目錄2022/7/2921. 列表2. 元組3. 字典4. 集合5. 組合數(shù)據(jù)類型的高級(jí)特性第69頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.1切片La:b表示從索引a開始取,直到索引b為止,但不包括索引b。取前3個(gè)元素,用一行代碼就可以完成切片。從索引1開始,取出2個(gè)元素:支持倒數(shù)切片。L-1取倒數(shù)第一個(gè)元素 L = Michael, Sarah, Tracy,

37、 Bob, Jack L0:3Michael, Sarah, Tracy L1:3Sarah, Tracy第70頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.1切片簡(jiǎn)單應(yīng)用切片操作十分有用。我們先創(chuàng)建一個(gè)099的數(shù)列。 L = list(range(100) L0, 1, 2, 3, , 99 L-10:90, 91, 92, 93, 94, 95, 96, 97, 98, 99可以通過(guò)切片輕松取出某一段數(shù)列。比如前10個(gè)數(shù): L:100, 1, 2, 3, 4, 5, 6, 7, 8, 9后10個(gè)數(shù):第71頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.1切片簡(jiǎn)單應(yīng)用前1120個(gè)數(shù): L10:20

38、10, 11, 12, 13, 14, 15, 16, 17, 18, 19 L:50, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95前10個(gè)數(shù),每?jī)蓚€(gè)取一個(gè): L:10:20, 2, 4, 6, 8所有數(shù),每5個(gè)取一個(gè):第72頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.1切片tuple切片、字符串切片tuple也是一種list,唯一區(qū)別是tuple不可變。因此,tuple也可以用切片操作,只是操作的結(jié)果仍是tuple。 (0, 1, 2, 3, 4, 5):3(0, 1, 2)字符串xxx也

39、可以看成是一種list,每個(gè)元素就是一個(gè)字符。因此,字符串也可以用切片操作,只是操作結(jié)果仍是字符串。 ABCDEFG:3ABC ABCDEFG:2ACEG第73頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.2迭代可迭代對(duì)象的迭代列表這種數(shù)據(jù)類型有下標(biāo),但很多其他數(shù)據(jù)類型是沒(méi)有下標(biāo)的,但是,只要是可迭代對(duì)象,無(wú)論有無(wú)下標(biāo),都可以迭代。第74頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.2迭代可迭代對(duì)象的迭代字典的迭代 d = a: 1, b: 2, c: 3 for key in d: print(key)acb由于字典是無(wú)序的,因此迭代出的結(jié)果順序可能與上述結(jié)果不一樣。默認(rèn)情況下,dict迭代的是

40、key。如果要迭代value,可以用for value in d.values(),如果要同時(shí)迭代key和value,可以用for k, v in d.items()。第75頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.2迭代可迭代對(duì)象的迭代集合的迭代 s=set(1,2,3,4) s1, 2, 3, 4 for x in s:print(x)1234第76頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.2迭代可迭代對(duì)象的迭代字符串的迭代 for ch in ABC: print(ch)ABC所以,當(dāng)我們使用for循環(huán)時(shí),只要作用于一個(gè)可迭代對(duì)象,for循環(huán)就可以正常運(yùn)行,而我們不用太關(guān)心該對(duì)象究竟

41、是list還是其他數(shù)據(jù)類型。第77頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.2迭代Iterable類型對(duì)于一個(gè)對(duì)象,通常是通過(guò)collections模塊的Iterable類型判斷該對(duì)象是否是一個(gè)可迭代的對(duì)象,如: from collections import Iterable isinstance(abc, Iterable# str是否可迭代True isinstance(1,2,3, Iterable)# list是否可迭代True isinstance(123, Iterable)# 整數(shù)是否可迭代False第78頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.2迭代列表實(shí)現(xiàn)下標(biāo)循環(huán)如果

42、要對(duì)list實(shí)現(xiàn)類似Java那樣的下標(biāo)循環(huán),要怎么辦呢?Python內(nèi)置的enumerate函數(shù)可以把一個(gè)list變成索引元素對(duì),這樣就可以在for循環(huán)中同時(shí)迭代索引和元素本身。 for i, value in enumerate(A, B, C): print(i, value)0 A1 B2 C第79頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.3列表生成式一層循環(huán) list(range(1, 11)1, 2, 3, 4, 5, 6, 7, 8, 9, 10要生成list 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,可以用list(range(1, 11): L = for

43、x in range(1, 11): L.append(x * x) L1, 4, 9, 16, 25, 36, 49, 64, 81, 100但如果要生成11, 22, 33, 1010,可使用下列語(yǔ)句。第80頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.3列表生成式一層循環(huán) x * x for x in range(1, 11)1, 4, 9, 16, 25, 36, 49, 64, 81, 100利用列表生成式可以用一行語(yǔ)句代替循環(huán)生成上面的list。 x * x for x in range(1, 11) if x % 2 = 04, 16, 36, 64, 100for循環(huán)后面還可以加

44、上if判斷,這樣我們就可以篩選出僅偶數(shù)的平方。第81頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.3列表生成式一層循環(huán) L = Hello, World, IBM, Apple s.lower() for s in Lhello, world, ibm, apple另外,也可把一個(gè)list中所有的字符串變成小寫:第82頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.3列表生成式兩層循環(huán) m + n for m in ABC for n in XYZAX, AY, AZ, BX, BY, BZ, CX, CY, CZ下面看一個(gè)兩層循環(huán)的例子。上例同時(shí)執(zhí)行for m in ABC循環(huán)和for n in

45、XYZ循環(huán),然后再執(zhí)行m+n。第83頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.4生成器通過(guò)列表生成式,我們可以直接創(chuàng)建一個(gè)列表。但由于計(jì)算機(jī)內(nèi)存有限,當(dāng)生成一個(gè)列表時(shí),由于受到計(jì)算機(jī)內(nèi)存容量的限制,我們需要使用合理的方法生成列表。例如,對(duì)于一個(gè)包含百萬(wàn)數(shù)目的列表,無(wú)法直接創(chuàng)建該列表。如果該列表元素可以按照某種算法推算出來(lái),那我們是否可以在循環(huán)的過(guò)程中不斷推算出后續(xù)的元素呢?答案是肯定的,而這樣做的好處是不必創(chuàng)建完整的list,可以節(jié)省大量的空間。在Python中,這種一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器(generator)。第84頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.4生成器簡(jiǎn)單生成器

46、要?jiǎng)?chuàng)建一個(gè)generator,有很多種方法。第一種方法很簡(jiǎn)單,只要把一個(gè)列表生成式的改成(),就創(chuàng)建了一個(gè)generator。 L = x * x for x in range(10) L0, 1, 4, 9, 16, 25, 36, 49, 64, 81 g = (x * x for x in range(10) ggenerator object at 0 x1022ef630第85頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.4生成器帶yield語(yǔ)句的生成器如果一個(gè)函數(shù)定義中包含yield關(guān)鍵字,那么這個(gè)函數(shù)就不再是一個(gè)普通函數(shù),而是一個(gè)generator。這里最難理解的就是generator和函數(shù)的執(zhí)行流程不一樣。函數(shù)是順序執(zhí)行,遇到return語(yǔ)句或者最后一行函數(shù)語(yǔ)句就返回。而generator函數(shù),在每次調(diào)用next()的時(shí)候執(zhí)行,遇到y(tǒng)ield語(yǔ)句返回,再次執(zhí)行時(shí)從上次返回的yield語(yǔ)句處繼續(xù)執(zhí)行。第86頁(yè),共93頁(yè)。5.組合數(shù)據(jù)類型的高級(jí)特性5.4生成器遞歸生成器 def flatten(nested):try:#不要迭代類似字符串的對(duì)象try:nested+except TypeError:passelse:raise TypeErrorfor sublist in nested:for element in flatte

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論