PYthon語言程序設(shè)計課件第4章 組合數(shù)據(jù)類型_第1頁
PYthon語言程序設(shè)計課件第4章 組合數(shù)據(jù)類型_第2頁
PYthon語言程序設(shè)計課件第4章 組合數(shù)據(jù)類型_第3頁
PYthon語言程序設(shè)計課件第4章 組合數(shù)據(jù)類型_第4頁
PYthon語言程序設(shè)計課件第4章 組合數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

4.1 組合數(shù)據(jù)類型概述Python中組合數(shù)據(jù)類型有3類:序列類型、映射類型和集合類型。序列類型是一個元素向量,元素之間存在先后關(guān)系,通過索引號(又稱下標(biāo))訪問。Python中的序列類型主要有字符串(str),列表類型(list)和元組類型(tuple)等。映射類型是一種鍵值對,一個鍵只能對應(yīng)一個值,但是多個鍵可以對應(yīng)相同的值,通過鍵可以訪問值,鍵的取值只能是不可變的數(shù)據(jù)類型。字典類型(dict)是Python中唯一的映射類型。集合類型是通過數(shù)學(xué)中的集合概念引進(jìn)的,是一種無序不重復(fù)的元素集。構(gòu)成集合的元素只能是不可變的數(shù)據(jù)類型,例如整型、字符串、元組等,而列表、字典等是可變數(shù)據(jù)類型,不能作為集合中的數(shù)據(jù)元素。4.2 列表類型列表(list)是Python語言中提供的一種內(nèi)置序列類型。列表是由中括號括起來的零個或多個元素組成,元素與元素之間由逗號分隔。列表中的元素類型不固定,既可以是基本數(shù)據(jù)類型的數(shù)據(jù)也可以是組合數(shù)據(jù)類型的數(shù)據(jù)。4.2 列表類型如果一個列表中所有的元素又都是列表,則稱該列表為二維列表,例如:列表[[1,3,5,7],[2,4,6,8],[7,8,9,10]]就是一個二維列表,該列表有3個元素組成,每一個元素又都是由4個元素的列表。列表是一種有序的可變數(shù)據(jù)類型。例如列表[1,2,3]和列表[2,1,3],雖然都是由元素1,2,3組成,但它們的順序不一樣,表示為不同的列表。4.2.1 創(chuàng)建列表對象在Python語言中,創(chuàng)建列表是通過賦值語句將一個列表賦給一個變量來實現(xiàn)的。沒有元素,只有一個[]的列表為空列表。>>>list1=[1,2,3]#將列表[1,2,3]賦給變量list1>>>list1[1,2,3]>>>list2=[]#將空列表賦給變量list2>>>list2[]在Python語言中,也可以使用內(nèi)置函數(shù)list()將其他對象轉(zhuǎn)換列表數(shù)據(jù)。例如:>>>list4=list("Python")#將字符串”Python”轉(zhuǎn)換成列表>>>list4['P','y','t','h','o','n']>>>list8=list({'a':123,'b':456,'c':2})#將字典{'a':123,'b':456,'c':2}各元素的鍵轉(zhuǎn)換成列表>>>list8['a','b','c']4.2.1 創(chuàng)建列表對象在Python語言中,也可以使用列表推導(dǎo)式來創(chuàng)建列表。列表推導(dǎo)式是Python構(gòu)建列表(list)的一種快捷方式,使用簡潔的代碼就創(chuàng)建出一個列表。列表推導(dǎo)式的語法格式如下:[表達(dá)式for變量in可迭代對象]或者[表達(dá)式for變量in可迭代對象if條件]在Python語言中可迭代對象主要有列表、元組、集合、字典、字符串和range()對象等。4.2.1 創(chuàng)建列表對象例如:>>>list1=[2,5,8,3,16,22,35,17]>>>list2=[iforiinlist1ifi%5==0]#把列表list1中能被5整除的數(shù)生成一個列表>>>list2[5,35]又例如利用列表推導(dǎo)式生成1到11之間(不包括11)的所有整數(shù)的平方:>>>list3=[i**2foriinrange(1,11)]>>>list3[1,4,9,16,25,36,49,64,81,100]4.2.2 訪問列表列表是一種有序的數(shù)據(jù)類型,既可以整體訪問,也可以通過索引訪問其中的元素。索引訪問的語法格式如下: object[index]索引有兩種,一種為正向索引(從左到右):第一個元素的索引號為0,第二個元素的索引號為1,以此類推;另一種為反向索引(從右到左):即倒數(shù)第一個元素的索引號為-1,倒數(shù)第二個元素的索引號為-2,以此類推。4.2.2 訪問列表以list1=[1,2,3,5,7,9]為例,索引號的取值如表4-1所示。4.2.2 訪問列表>>>list1=[1,3,5,7,9,11]#創(chuàng)建了具有6個元素的列表>>>list1[2]#訪問列表list1中索引號為2的元素5>>>list1[8]#試圖訪問列表list1中索引號為8的元素,觸發(fā)異常Traceback(mostrecentcalllast):File"<pyshell#24>",line1,in<module>list1[8]IndexError:listindexoutofrange>>>list1[-6]#訪問列表list1中索引號為-6的元素14.2.2 訪問列表在Python語言中,也可以使用遍歷的方式訪問列表中的每一個元素,例如:>>>list8=list(range(20,41,2))>>>foriinlist8: print(i,end=';')20;22;24;26;28;30;32;34;36;38;40;4.2.2 訪問列表二維列表的訪問與一維列表的訪問類似,也是通過列表名[索引號]的方式訪問,如果要訪問二維列表中元素里面的元素,則要使用兩個下標(biāo)訪問,其語法格式為:object[index1][index2],其中index1為行下標(biāo),index2為列下標(biāo)。4.2.2 訪問列表>>>lista=[[1,3,5,7],[2,4,6,8],[3,6,9,12]]#創(chuàng)建二維列表lista>>>lista[0]#通過一個下標(biāo)訪問索引號為0的元素[1,3,5,7]>>>lista[0][2]#訪問行下標(biāo)為0,列下標(biāo)為2的元素54.2.3 列表的切片操作在Python語言中,對于有序的數(shù)據(jù)類型,都可以通過切片操作,抽取其中的部分值。列表切片表達(dá)式的基本語法格式如下: object[start_index:end_index:step]上述切片表達(dá)式的功能是切取object中從索引號start_index開始到索引號end_index前一個元素止(即不包括索引號為end_index的元素),步長為step的部分元素組成的列表。4.2.3 列表的切片操作>>>list1=[1,2,3,4,5,6,7,8]#創(chuàng)建值為[1,2,3,4,5,6,7,8]的列表list1>>>list1[2:6:2]#表示抽取索引號為2,4的元素組成的列表[3,5]4.2.3 列表的切片操作①輸出列表list1中的偶數(shù)元素;>>>list1=[1,3,5,7,9,2,4,6,8,10]>>>list1[5:][2,4,6,8,10]②輸出列表list1中索引號為偶數(shù)的元素;>>>list1[::2][1,5,9,4,8]③逆序輸出列表list1中所有元素;>>>list1[::-1][10,8,6,4,2,9,7,5,3,1]【例4-1】已知列表list1=[1,3,5,7,9,2,4,6,8,10],請寫出能實現(xiàn)下列功能的切片表達(dá)式。4.2.3 列表的切片操作一般來說,如果切片表達(dá)式出現(xiàn)在賦值號的右邊,是指抽取切片表達(dá)式中指定的數(shù)據(jù)參與其他運算,如果切片表達(dá)式出現(xiàn)在賦值號的左邊,則是指對列表進(jìn)行修改、刪除和插入等操作。4.2.3 列表的切片操作>>>list1=[1,2,3,4,5,6,7,8,9]#創(chuàng)建列表對象list1>>>list2=list1[::2]#把list1的切片賦給list2>>>list2[1,3,5,7,9]>>>list3=list1[2:5]#把list1的切片賦給list3>>>list3[3,4,5]4.2.3 列表的切片操作切片在賦值號左邊,且右邊列表中的元素個數(shù)與左邊切片中的元素個數(shù)相等,則修改。例如:>>>list1=[1,2,3,4,5,6,7,8,9]>>>list1[2:5]=[12,13,14]#替換list1中索引號為2,3,4的元素>>>list1[1,2,12,13,14,6,7,8,9]>>>list1[1::2]=[5,5,5,5]#替換list1中索引號為奇數(shù)的元素>>>list1[1,5,12,5,14,5,7,5,9]>>>list1[1]=15#用右邊的15修改替換列表list1中索引號為1的元素>>>list1[1,15,12,5,14,5,7,5,9]4.2.3 列表的切片操作切片在賦值號左邊,且右邊列表中的元素個數(shù)大于左邊切片中的元素個數(shù),則元素個數(shù)范圍相等的修改,多出的元素插入。例如:>>>list1=[1,3,5]#創(chuàng)建列表對象>>>list1[1:]=[2,3,4]#右邊列表中有3個元素,左邊切片有2個元素,前兩個修改,多出的插入>>>list1[1,2,3,4]>>>list1[:0]=[2,4]#右邊列表2個元素,左邊切片為0個元素,則表示在list1的最前面插入元素2,4>>>list1[2,4,1,2,3,4]4.2.3 列表的切片操作切片在賦值號左邊,且右邊列表中的元素個數(shù)小于左邊切片中的元素個數(shù),則修改且刪除。例如:>>>list1=[2,4,6,8,10]#創(chuàng)建列表對象>>>list1[:3]=[1,2]#用右邊列表中的兩個元素替換左邊切片中的三個元素,即刪除了一個元素>>>list1[1,2,8,10]>>>list1[:3]=[]#刪除前三個元素>>>list1[10]4.2.4 列表的操作列表是一種可變的數(shù)據(jù)類型,對列表的操作主要體現(xiàn)在修改、添加、刪除等操作上。4.2.4 列表的操作1.用于列表對象的運算符表4?2列表對象的運算符及功能運算符功能實例實例的結(jié)果+首尾拼接兩個列表對象[1,3,5]+[2,4,6,8][1,3,5,2,4,6,8]*對列表重復(fù)n次[1,3,5]*3[1,3,5,1,3,5,1,3,5]in判斷元素是否在列表中3in[1,3,5]Truenotin判斷元素是否不在列表中3notin[1,3,5]False4.2.4 列表的操作2. 列表操作函數(shù)表4?3列表操作函數(shù)函數(shù)名功能實例實例的結(jié)果len(List)求列表List的長度,即元素的個數(shù)len([1,3,5])3max(List)求列表List中最大的元素max([11,13,5,7,8]13min(List)求列表List中最小的元素min([11,13,5,7,8]5sum(List)求列表List中元素的和sum([1,3,5,6])15list(seq)把其他序列類型的數(shù)據(jù)轉(zhuǎn)換成列表list(“Python”)['P','y','t','h','o','n']4.2.4 列表的操作3. 列表的操作方法表4?4列表的常用操作方法方法功能List.append(obj)在列表List末尾添加新的對象List.count(obj)統(tǒng)計某個元素在列表List中出現(xiàn)的次數(shù)List.extend(seq)在列表List末尾一次性追加另一個序列中的多個值(用新序列seq擴展原來的列表List)List.index(obj)從列表List中找出與obj的第一個匹配項的索引位置List.insert(index,obj)將對象obj插入到列表List4.2.4 列表的操作表4?4列表的常用操作方法(續(xù))方法功能List.pop([index=-1])移除列表List中的一個元素(默認(rèn)最后一個元素),并且返回該元素的值List.remove(obj)移除列表List中與obj的第一個匹配項List.reverse()反向列表List中元素List.sort(key=None,reverse=False)對原列表List進(jìn)行排序List.clear()清空列表ListList.copy()復(fù)制列表List4.2.4 列表的操作>>>list1=[1,2,1,1,2,4,5,3,2]#創(chuàng)建列表對象list1>>>list1.count(2)#統(tǒng)計列表list1中元素2出現(xiàn)的次數(shù)3>>>list1.index(2)#檢索元素2第一次在列表list1中出現(xiàn)的位置(索引號)1>>>list1.sort(reverse=True)#對列表list1中的元素進(jìn)行降序排列4.2.4 列表的操作在Python語言中,clear()方法是把列表中的元素都清除了,但列表還在。如果要刪除列表,可以使用del語句。例如:>>>list1=[1,2,3,4,5,6,7,8,9]#創(chuàng)建列表對象list1>>>dellist1[5]#刪除列表list1中索引號為5的元素>>>list1[1,2,3,4,5,7,8,9]>>>dellist1#刪除列表list1>>>dellist1#刪除列表list14.2.4 列表的操作【例4-2】已知一個班級有n名同學(xué)(具體人數(shù)由鍵盤輸入),期中考試考了《Python程序設(shè)計基礎(chǔ)》。要求編寫程序,逐個輸入這n名同學(xué)的成績(整數(shù)),計算并輸出該門課程的平均分(浮點數(shù),保留2位小數(shù))和高于平均分的人數(shù),最后把該門課程的分?jǐn)?shù)從低到高的輸出。分析:要存儲n名同學(xué)的考試分?jǐn)?shù),可以使用列表。首先置一空列表,使用循環(huán)輸入n個學(xué)生的成績,每輸入一個成績,就把該成績添加到列表中去。循環(huán)結(jié)束,n個同學(xué)的成績就保存到列表中了。然后使用內(nèi)置函數(shù)sum對列表進(jìn)行求和,再求平均分。再用遍歷的方法把每個同學(xué)的成績與平均分比較,統(tǒng)計出高于平均分的人數(shù)。最后使用sort()方法排序,輸出。4.2.4 列表的操作#liti4-2.pyn=int(input("請輸入班級學(xué)生人數(shù):"))score=[]foriinrange(n):cj=int(input("請輸入第"+str(i+1)+"個學(xué)生的成績:"))score.append(cj)aver=sum(score)/nprint("平均分={0:.2f}".format(aver))4.2.4 列表的操作count=0foriinrange(n):ifscore[i]>aver:count=count+1print("高于平均分的人數(shù)={0}".format(count))print("學(xué)生分?jǐn)?shù)從低到高如下:")score.sort()print(score)4.3 元組類型在Python語言中,元組(tuple)與列表類似,也是Python語言中提供的一種內(nèi)置序列類型。元組是由小括號括起來的零個或多個元素組成,元素與元素之間由逗號分隔。元組中的元素類型不固定,既可以是基本數(shù)據(jù)類型的數(shù)據(jù)也可以是組合數(shù)據(jù)類型的數(shù)據(jù)。4.3 元組類型元組與列表不同的是元組是一種有序的不可變數(shù)據(jù)類型。而列表是有序的可變數(shù)據(jù)類型,即元組中的元素是不能修改、刪除、插入和追加的,只能通過索引和切片訪問。4.3.1 元組的創(chuàng)建在Python語言中,創(chuàng)建元組也是通過賦值語句將一個元組賦給一個變量來實現(xiàn)的。沒有元素,只有一個()的為空元組,只有一個元素的元組,必須要在元素后面加上逗號。4.3.1 元組的創(chuàng)建>>>tup2=(1,3,5,6,1)#將元組(1,3,,5,6,1)賦給tup2>>>tup2(1,3,5,6,1)>>>tup4=(5,)#將只有一個元素的元組賦給tup4,逗號不能省>>>tup4(5,)>>>tup5=()#將空元組賦給tup5>>>tup5()4.3.1 元組的創(chuàng)建在Python語言中,也可以使用內(nèi)置函數(shù)tuple()將其他對象轉(zhuǎn)換成元組,例如:>>>tup7=tuple("Python")#將字符串轉(zhuǎn)換成元組并賦給tup7>>>tup7('P','y','t','h','o','n')4.3.1 元組的創(chuàng)建與列表推導(dǎo)式不同,元組中的推導(dǎo)式叫生成器推導(dǎo)式,其語法格式如下:(表達(dá)式for變量in可迭代對象)或者(表達(dá)式for變量in可迭代對象if條件)4.3.1 元組的創(chuàng)建>>>tup9=(i**2foriinrange(5))>>>tup9<generatorobject<genexpr>at0x0000000002EB9408>4.3.1 元組的創(chuàng)建生成器推導(dǎo)式的結(jié)果是一個生成器對象,而不是元組,這與列表推導(dǎo)式有很大不同,列表推導(dǎo)式的結(jié)果是列表。使用生成器對象的元素時,可以將生成器對象轉(zhuǎn)換成列表或元組。例如:>>>tup9=(i**2foriinrange(5))#創(chuàng)建生成器推導(dǎo)式,把其結(jié)果賦給tup9>>>tup10=tuple(tup9)#將生成器對象tup9轉(zhuǎn)換成元組,賦給tup10>>>tup10(0,1,4,9,16)4.3.1 元組的創(chuàng)建生成器對象只能使用一次,使用完后就被釋放,如需再次使用,則要重新產(chǎn)成生成器對象。>>>tup9=(i**2foriinrange(5))>>>foriintup9:print(i,end=';')

0;1;4;9;16;4.3.2 元組的訪問和切片與列表一樣,元組也是通過下標(biāo)索引號來訪問單個元組元素,通過切片訪問一組元素。>>>tup1=(1,3,2,4,3,6)>>>tup1[3]4>>>tup1[2:4](2,4)4.3.2 元組的訪問和切片元組是不可變的組合數(shù)據(jù)類型,不能通過賦值語句修改元組中的元素值,否則將觸發(fā)異常,例如:>>>tup1[1]=8#試圖通過修改元組中索引號為1的元素的值,觸發(fā)異常Traceback(mostrecentcalllast):File"<pyshell#21>",line1,in<module>tup1[1]=8TypeError:'tuple'objectdoesnotsupportitemassignment4.3.3 元組類型的操作1. 用于元組對象的運算符表4?5元組對象的運算符及功能運算符功能實例實例的結(jié)果+首尾拼接兩個元組對象(1,2)+(5,6)(1,2,5,6)*對元組重復(fù)n次(1,4,8)*3(1,4,8,1,4,8,1,4,8)in判斷元素是否在元組中3in(1,3,5)Truenotin判斷元素是否不在元組中3notin(1,3,5)False4.3.3 元組類型的操作2. 元組操作函數(shù)表4?6元組操作函數(shù)函數(shù)名功能實例實例的結(jié)果len(Tuple)求元組Tuple的長度,即元素的個數(shù)len((1,3,5))3max(Tuple)求元組Tuple中最大的元素max((11,13,5,7,8))13min(Tuple)求元組Tuple中最小的元素min((11,13,5,7,8))5sum(Tuple)求元組Tuple中元素的和sum((1,3,5,6))15tuple(seq)把其他序列類型的數(shù)據(jù)轉(zhuǎn)換成元組tuple(“Python”)('P','y','t','h','o','n')4.3.3 元組類型的操作3. 元組的操作方法表4?7元組的常用操作方法序號方法功能1Tuple.count(obj)統(tǒng)計某個元素在元組Tuple中出現(xiàn)的次數(shù)2Tuple.index(obj)從元組Tuple中找出與obj的第一個匹配項的索引位置4.3.3 元組類型的操作【例4-3】已知元組(31,45,21,37,98,65,43,48,69,90,77,35),編寫程序,對該元組中的數(shù)據(jù)進(jìn)行降序排列,并仍以元組的形式輸出。4.3.3 元組類型的操作#liti4-3.pytup1=(31,45,21,37,98,65,43,48,69,90,77,35)list1=list(tup1)list1.sort(reverse=True)tup2=tuple(list1)print(tup2)程序運行后的結(jié)果為:(98,90,77,69,65,48,45,43,37,35,31,21)4.4 集合類型集合(set)是一種無序的可變的組合數(shù)據(jù)類型,在Python語言中,集合由大括號把元素括起來,且集合中的元素是唯一的。集合中的元素必須是不可變的數(shù)據(jù)類型,即可變的數(shù)據(jù)類型如列表、集合和字典等類型的數(shù)據(jù)不能作為集合中的元素。集合是一種無序的數(shù)據(jù)類型,所以集合不可以通過索引訪問其中的元素,也不可以進(jìn)行切片操作。4.4.1 集合類型的創(chuàng)建在Python語言中,集合對象的創(chuàng)建是使用賦值語句進(jìn)行的,如果要創(chuàng)建一個空集合,必須使用set()函數(shù)。>>>set1={1,2,3}#將集合{1,2,3}賦給set1>>>set1{1,2,3}>>>set3=set()#空集合表示為set(),把空集合賦給set3>>>set3set()>>>set4={1,3,(4,5)}#把集合{1,3,(4,5)}賦給set4>>>set4{(4,5),1,3}>>>set5={2,4,[7,8]}#列表是可變數(shù)據(jù)類型,不能作為集合的元素,觸發(fā)異常4.4.1 集合類型的創(chuàng)建可以使用set()函數(shù),把其他類型轉(zhuǎn)換成集合,例如:>>>set7=set([1,2,3,4,2,1])#用轉(zhuǎn)換函數(shù)set(),把列表轉(zhuǎn)換成集合>>>set7#集合中不存在重復(fù)的元素{1,2,3,4}4.4.1 集合類型的創(chuàng)建在Python語言中,也可以使用集合推導(dǎo)式來創(chuàng)建集合。集合推導(dǎo)式的語法格式如下:{表達(dá)式for變量in可迭代對象}或者{表達(dá)式for變量in可迭代對象if條件}例如:>>>set8={iforiinrange(1,20,3)}>>>set8{1,4,7,10,13,16,19}4.4.2 集合的訪問集合是一種無序的組合數(shù)據(jù)類型,所以集合不能通過索引和切片訪問其中的元素,但可以通過遍歷來訪問集合中的每一個元素。例如:>>>set1={3,5,1,8}>>>foriinset1: print(i,end=';')

8;1;3;5;4.4.3 集合類型的操作1. 集合的運算表4?8集合對象的運算符及功能運算符功能實例實例的結(jié)果in判斷元素是否在集合中3in{1,3,5}Truenotin判斷元素是否不在集合中3notin{2,4,6}True==判斷兩個集合是否相等{1,3,5}=={5,1,3}True!=判斷兩個集合是否不相等{1,3,5}!={3,1,5}Falseset1<set2判斷set1是否是set2的真子集{1,3}<{1,3,5}{1,3,5}<{1,3,5}TrueFalse4.4.3 集合類型的操作表4?8集合對象的運算符及功能運算符功能實例實例的結(jié)果set1<=set2判斷set1是否是set2的子集{1,3}<={1,3,5}{1,3,5}<={1,3,5}TrueTrueset1>set2判斷set1是否完全包含set2{1,3,7}>{1,3}{1,3,5}>{1,3,5}TrueFalseset1>=set2判斷set1是否包含set2{1,3,7}>={1,3}{1,3,5}>={1,5,3}TrueTrueset1&set2求set1和set2的交集{1,3,7}&{1,3,9}{1,3}set1|set2求set1和set2的并集{1,3,7}|{1,3,9}{1,3,7,9}set1-set2求屬于set1,但不屬于set2的元素{1,3,7}-{1,3,9}{7}set1^set2求set1和set2的對稱差{1,3,7}^{1,3,9}{9,7}4.4.3 集合類型的操作集合的操作函數(shù)表4?9集合操作函數(shù)函數(shù)名功能實例實例的結(jié)果len(Set)求集合Set的長度,即元素的個數(shù)len({1,3,5})3max(Set)求集合Set中最大的元素max({11,13,5,7,8})13min(Set)求集合Set中最小的元素min({11,13,5,7,8})5sum(Set)求集合Set中元素的和sum({1,3,5,6})15set(seq)把其他序列類型的數(shù)據(jù)轉(zhuǎn)換成集合set(“Python”){'h','o','P','n','t','y'}4.4.3 集合類型的操作3.集合的操作方法表4?10集合的常用操作方法序號方法功能1Set.add(x)給集合Set添加一個元素x2Set.update(x)給集合Set添加一個x,x為可迭代對象3Set.remove(x)在集合Set中移除元素x,若x不存在,觸發(fā)異常4Set.discard(x)在集合Set中刪除指定的元素,若x不存在,不報錯5Set.pop()隨機移除Set中的一個元素6Set.clear()移除集合Set中的所有元素7Set.copy()拷貝集合Set4.4.3 集合類型的操作下面給一些操作實例:>>>set1={1,3,5,7}#創(chuàng)建集合set1>>>set1.add(9)#給集合添加元素9>>>set1{1,3,5,7,9}>>>set1.update({2,4})#給集合添加集合{2,4}中的元素>>>set1{1,2,3,4,5,7,9}4.5 字典類型與集合類似,字典(dictionary)也是無序可變的組合數(shù)據(jù)類型。但與集合不同的是,字典是一種映射型的組合數(shù)據(jù)類型,字典中的每個元素由鍵值對組成。在字典中,每個元素的鍵的取值是唯一的,且必須是不可變的數(shù)據(jù)類型,即列表、集合和字典等可變類型的數(shù)據(jù)不能作為鍵的取值;每個元素值的取值則可以是任何數(shù)據(jù)類型的數(shù)據(jù),沒有任何限制。4.5.1 字典的創(chuàng)建創(chuàng)建字典可以通過賦值語句進(jìn)行,例如:>>>dict1={'Id':210101,'Name':'趙小明','Score':[85,79,80,67,79,92],'Sex':'M','Age':19}>>>dict1{'Id':210101,'Name':'趙小明','Score':[85,79,80,67,79,92],'Sex':'M','Age':19}>>>dict2={}>>>dict2{}4.5.1 字典的創(chuàng)建可以使用dict()函數(shù),把鍵值對形式的列表或元組轉(zhuǎn)換成字典,也可以在dict()函數(shù)中使用關(guān)鍵字參數(shù)(參照第5章函數(shù))的形式創(chuàng)建字典。例如:>>>dict4=dict([['Id',210102],['Name','孫中文'],['Age',20]])#把列表轉(zhuǎn)換成字典>>>dict4{'Id':210102,'Name':'孫中文','Age':20}4.5.1 字典的創(chuàng)建也可以使用字典的fromkeys()方法對字典進(jìn)行初始化。formkeys()方法的語法格式如下:dictName.fromkeys(seq[,value])>>>dict8={}.fromkeys(['sno','name','major'])>>>dict8{'sno':None,'name':None,'major':None}>>>dict9={}.fromkeys(('sno','name','major'),'Unknown')>>>dict9{'sno':'Unknown','name':'Unknown','major':'Unknown'}4.5.1 字典的創(chuàng)建在Python語言中,還可以使用字典推導(dǎo)式來創(chuàng)建字典,其語法格式如下:{鍵:值for變量in可迭代對象}或者{鍵:值for變量in可迭代對象if條件}>>>dict10={i:i**2foriinrange(5)}>>>dict10{0:0,1:1,2:4,3:9,4:16}4.5.2 字典的訪問字典的鍵值對是一種映射關(guān)系,可以根據(jù)“鍵”來訪問“值”。所以訪問字典中鍵值對的值可以通過方括號并指定鍵的方式進(jìn)行訪問。如果“鍵”不存在,則觸發(fā)異常。>>>dict1={'Id':210101,'Name':'趙小明','Score':[85,79,80,67,79,92],'Sex':'M','Age':19}>>>dict1['Name']#通過鍵’Name’,訪問其對應(yīng)的值'趙小明'4.5.2 字典的訪問字典對象提供了一個get()方法,該方法通過鍵訪問其對應(yīng)的值。其調(diào)用格式為:dictName.get(keyName[,value])其功能為當(dāng)字典dictName中鍵keyName存在時,返回該鍵對應(yīng)的值,而鍵不存在也不會出錯,而返回指定值value,value的默認(rèn)值為None。4.5.2 字典的訪問>>>dict5=dict((('Id',210102),('Name','孫中文'),('Age',20)))>>>dict5{'Id':210102,'Name':'孫中文','Age':20}>>>dict5.get('Id')210102>>>dict5.get('Class','該鍵不存在')'該鍵不存在'4.5.2 字典的訪問與列表、元組、集合類似,可以通過遍歷來訪問,但是字典默認(rèn)遍歷的是鍵,而不是元素,當(dāng)然也可以使用字典對象的keys()方法來指明遍歷字典的鍵。如果需要遍歷字典的元素必須使用字典對象的items()方法,如果需要遍歷字典的“值”,則必須使用字典對象的values()方法。4.5.2 字典的訪問>>>dict1={'Id':210101,'Name':'趙小明','Score':[85,79,80,67,79,92],'Sex':'M','Age':19}>>>fordindict1:#默認(rèn)情況下,遍歷字典的鍵 print(d,end=';')Id;Name;Score;Sex;Age;>>>fordindict1.keys():#指明遍歷字典的鍵 print(d,end=';')Id;Name;Score;Sex;Age;4.5.2 字典的訪問>>>fordindict1.items():#遍歷字典的元素 print(d)('Id',210101)('Name','趙小明')('Score',[85,79,80,67,79,92])('Sex','M')('Age',19)>>>fordindict1.values():#遍歷字典的元素中的值 print(d)210101趙小明[85,79,80,67,79,92]M194.5.3 字典類型的操作1. 字典的運算符及操作函數(shù)運算符/函數(shù)功能含義in包含,判斷某個鍵值對或鍵或值是否在字典中notin不包含,判斷某個鍵值對或鍵或值是否不在字典中dict1[k]=v修改,添加。若k是字典dict1中的鍵,則用v替換鍵k所對應(yīng)的值,否則在字典中添加由k:v組成的鍵值對元素len(dict1)求字典dict1中元素的個數(shù)max(dict1)求字典dict1中鍵的最大值,要求所有鍵的數(shù)據(jù)類型相同min(dict1)求字典dict1中鍵的最小值,要求所有鍵的數(shù)據(jù)類型相同sum(dict1)求字典dict1中所有鍵的和,要求所有鍵的數(shù)據(jù)類型為數(shù)字類型dict(list|tuple)把具有鍵值對形式的列表或元組轉(zhuǎn)換成字典4.5.3 字典類型的操作>>>dict1={1:'C++',2:'Python',3:'Java'}#創(chuàng)建字典對象dict1>>>(1,'C++')indict1.items()#判斷(1,'C++')是否是dict1中的鍵值對True>>>dict1[4]='VisulBasic'#4不是dict1中的鍵,則在字典中添加4:'VisulBasic'元素>>>dict1[1]='C'#1是dict1中的鍵,用’C’替換原來的值>>>dict1{1:'C',2:'Python',3:'Java',4:'VisulBasic'}>>>sum(dict1)#求字典dict1中所有鍵的和104.5.3 字典類型的操作2. 字典的操作方法方法功能描述Dict.clear()清空字典Dict內(nèi)所有元素Dict.copy()拷貝字典DictDict.fromkeys(seq,val)創(chuàng)建一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應(yīng)的初始值Di

溫馨提示

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

評論

0/150

提交評論