Python程序設(shè)計基礎(chǔ) 課件 第四章 數(shù)據(jù)表示_第1頁
Python程序設(shè)計基礎(chǔ) 課件 第四章 數(shù)據(jù)表示_第2頁
Python程序設(shè)計基礎(chǔ) 課件 第四章 數(shù)據(jù)表示_第3頁
Python程序設(shè)計基礎(chǔ) 課件 第四章 數(shù)據(jù)表示_第4頁
Python程序設(shè)計基礎(chǔ) 課件 第四章 數(shù)據(jù)表示_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章數(shù)據(jù)表示Contents元組集合字典本章小結(jié)習(xí)題典型實例第2章介紹了基本數(shù)據(jù)類型(整型、浮點型、復(fù)數(shù)型、字符串等)和列表類型等。盡管基本數(shù)據(jù)類型與列表相組合可以表示任意數(shù)據(jù)類型,但是Python還是將一些特殊形式的數(shù)據(jù)類型及其相關(guān)的方法封裝成一些新的類,以方便這些數(shù)據(jù)類型的操作。這些數(shù)據(jù)類型包括元組、集合和字典等類型,本章將詳細(xì)介紹這些新的數(shù)據(jù)表示類型。01元組4.1元組在平面中,表示點的位置(或稱矢量)的坐標(biāo)(x,y),是一對有序數(shù)對,即(x,y)和(y,x)代表不同的點。同樣,在n維空間中,點的坐標(biāo)(x1,x2,…,xn)也是一組有序數(shù)列,各個坐標(biāo)值的位置是固定的。元組對應(yīng)著數(shù)學(xué)上的一組有序數(shù)列,例如,包含2個元素x和y的元組表示為(x,y),這里x和y為元組的元素,且不可改變??梢园言M理解為一個常量數(shù)列。4.1.1元組定義元組為由一列有順序的數(shù)據(jù)組成的數(shù)據(jù)類型,元組是只讀的。元組間的元素間用“,”號分隔,用圓括號作為元組與其他數(shù)據(jù)的分界符??赵M和只有一個元素的元組,沒有意義,如果非要表示只含一個元素的元組,使用類似于形式“(3,)”表示,即“,”號不能少。4.1.1元組定義1if__name__=='__main__':2p1=(3,5)3print(f'p1={p1}')4p2=(5,7,9)5print(f'p2={p2}')6print("p2'stypeis:",type(p2))7p3=tuple((3,1,2))8print(f'p3={p3}')4.1.1元組定義9p4=1,3,5,710print(f'p4={p4}')11u=[9,8,5]12p5=tuple(u)13print(f'p5={p5}')14p6=(3,)15print(f'p6={p6}')

4.1.1元組定義16print("p6'stypeis:",type(p6))17p7=()18print(f'p7={p7}')19print("p7'stypeis:",type(p7))20p8=tuple(range(1,10+1))21print(f'p8={p8}')

4.1.1元組定義第2行“p1=(3,5)”定義元組(3,5),賦給p1,p1可以表示平面上點的坐標(biāo),或平面上的一個矢量。第3行“print(f'p1={p1}')”在屏幕上輸出“p1=(3,5)”,注意,輸出元組時,自動添加一對圓括號。第4行“p2=(5,7,9)”將元組(5,7,9)賦給p2,p2可表示三維空間中的一個點,或三維空間中的一個矢量。第5行“print(f'p2={p2}')”在屏幕上輸出“p2=(5,7,9)”。第6行“print("p2'stypeis:",type(p2))”在屏幕上輸出p2的類型,得到“p2'stypeis:<class'tuple'>”。

4.1.1元組定義第2行“p1=(3,5)”定義元組(3,5),賦給p1,p1可以表示平面上點的坐標(biāo),或平面上的一個矢量。第3行“print(f'p1={p1}')”在屏幕上輸出“p1=(3,5)”,注意,輸出元組時,自動添加一對圓括號。第4行“p2=(5,7,9)”將元組(5,7,9)賦給p2,p2可表示三維空間中的一個點,或三維空間中的一個矢量。第5行“print(f'p2={p2}')”在屏幕上輸出“p2=(5,7,9)”。第6行“print("p2'stypeis:",type(p2))”在屏幕上輸出p2的類型,得到“p2'stypeis:<class'tuple'>”。

4.1.1元組定義第7行“p3=tuple((3,1,2))”為創(chuàng)建元組的標(biāo)準(zhǔn)方法,這里tuple為元組類型的類名,括號中的參數(shù)“(3,1,2)”為創(chuàng)建元組對象時設(shè)定的元組中各個元素的值,這里,表示創(chuàng)建一個包含3、1、2三個元素的元組。第8行“print(f'p3={p3}')”在屏幕上輸出元組p3,得到“p3=(3,1,2)”。第9行“p4=1,3,5,7”是一種非標(biāo)準(zhǔn)的創(chuàng)建元組的方法,不建議使用。在Python語言中,將這種形式的輸入自動設(shè)定為元組。第10行“print(f'p4={p4}')”輸出元組p4,得到“p4=(1,3,5,7)”。4.1.1元組定義第11行“u=[9,8,5]”得到列表u。第12行“p5=tuple(u)”也是一種標(biāo)準(zhǔn)的創(chuàng)建元組的方法,這里tuple為元組的類名,參數(shù)u為列表,將自動轉(zhuǎn)化為元組的形式,賦給p5。第14行“p6=(3,)”創(chuàng)建僅包含一個元素的元組,這種元組沒有意義。注意,這里的“,”號不能省略,因為“(3)”將表示整數(shù)3,其中的圓括號只是數(shù)據(jù)間的分界符,將被忽略。第15行輸出元組p6,得到“p6=(3,)”。第16行輸出p6的類型,得到“p6'stypeis:<class'tuple'>”,可見p6為一個元組。4.1.1元組定義第17行“p7=()”生成一個空元組,空元組沒有意義。第18行“print(f'p7={p7}')”輸出空元組p7。第19行“print("p7'stypeis:",type(p7))”輸出p7的類型,得到“p7'stypeis:<class'tuple'>”。第20行“p8=tuple(range(1,10+1))”由range對象生成元組,這里借助于類tuple的構(gòu)造方法生成元組p8,。第21行“print(f'p8={p8}')”輸出元組p8,得到“p8=(1,2,3,4,5,6,7,8,9,10)”。4.1.1元組定義程序執(zhí)行結(jié)果:模塊zym0401執(zhí)行結(jié)果4.1.1元組定義元組是一種復(fù)合數(shù)據(jù)類型,可以保存任意類型的數(shù)據(jù),這一點與列表相似。需要特別注意的是,元組中可以包含列表,而且其中的列表元素可以修改,這是因為元組中嵌入的列表僅是占位符,即元組使用了類似于“指針”或者“標(biāo)簽”的形式“引用”其中嵌入的列表,因此,對元組中列表的操作仍然是對列表的操作,而不是對元組的元素的操作,所以,元組中嵌入的列表中的元素可以修改。4.1.1元組定義包含不同數(shù)據(jù)類型的元組:1if__name__=='__main__':2a=(1,(2,3),[4,5],'HelloWorld',8,9,3.14,2.71828,1.414)3print('a=',a)4print("a'stypeis:",type(a))5a[2][1]=a[2][1]+36print('a=',a)4.1.1元組定義第2行“a=(1,(2,3),[4,5],'HelloWorld',8,9,3.14,2.71828,1.414)”定義元組a,其中包含了一個元組(2,3)、一個列表[4,5]、一個字符串“HelloWorld”、三個整數(shù)和三個浮點數(shù)。第3行“print('a=',a)”輸出元組a。第4行“print("a'stypeis:",type(a))”輸出元組a的類型。第5行“a[2][1]=a[2][1]+3”修改元組中列表“[4,5]”的第1個元)。第6行“print('a=',a)”輸出元組a。4.1.1元組定義程序執(zhí)行結(jié)果如下:模塊zym04024.1.1元組定義上程序段中關(guān)于只讀元組中的列表可修改的例子,進(jìn)一步說明Python語言中所有的數(shù)據(jù)名稱均為該數(shù)據(jù)的“標(biāo)簽”,Python語言中沒有“變量”的概念,數(shù)據(jù)的“標(biāo)簽”指向數(shù)據(jù)在內(nèi)存中的首地址。元組是只讀的,所以元組中的每個“標(biāo)簽”不能修改,其中的“列表”的標(biāo)簽也不能修改,但是,通過列表的“標(biāo)簽”訪問的列表的元素是可能修改的。4.1.1元組定義事實上,元組的作用在于表達(dá)類似于空間中點的坐標(biāo)(或矢量)之類的有序數(shù)據(jù),不宜用于其他用途。適合使用列表類型表示的數(shù)據(jù),不應(yīng)使用元組這種類型表示,因此,元組中嵌套列表不是一種好的數(shù)據(jù)表示。4.1.2元組元素訪問方法元組中的元素訪問方法與列表中的元素訪問方法相同。元組中元素的索引方式有兩種:一種為從左向右,索引號從0開始,從左向右遞增1;另一種從右向左,最后邊的元素(或稱元組最后的元素)的索引號為-1,從右向左遞減1??梢允褂谩埃骸碧栆淮涡栽L問元組的多個元素,有時也稱元組的“切片”訪問。4.1.2元組元素訪問方法1if__name__=='__main__':2a=(19,35,7,12,15,29,24,20,30,16,10,21)3print('a=',end='')4foreina:5print(e,end='')6print('\na=',end='')7foriinrange(len(a)):8print(a[i],end='')4.1.2元組元素訪問方法9print()10print(f'a={a}')11print(f'First:{a[0]},Last:{a[-1]}.')12print(a[2:2])13print(f'a[1]~a[1]:{a[1:2]}')14print(f'a[3]~a[8]:{a[3:8+1]}')15print(f'a[3],a[5],a[7]:{a[3:8+1:2]}')4.1.2元組元素訪問方法16print(f'a[-1]~a[-4]:{a[-1:-4-1:-1]}')第2行“a=(19,35,7,12,15,29,24,20,30,16,10,21)”定義元組a。第3行“print('a=',end='')”輸出“a=”且不換行。第4~5行為一個for結(jié)構(gòu),第4行“foreina:”遍歷元組a中的元素,對于每一個元素e,第5行“print(e,end='')”輸出e的值,后加一個空格。第4~5行說明元素為可迭代型的對象,可以使用for結(jié)構(gòu)逐個訪問元組中的元素。4.1.2元組元素訪問方法第6行先輸出換行符,再輸出“a=”。第7~8行為一個for結(jié)構(gòu),第7行“foriinrange(len(a)):”表示i從0按步長1遞增到len(a)-1,此時的每個i可作為元組中元素的索引號;對每個i,執(zhí)行第8行“print(a[i],end='')”輸出元組a中的各個元素??梢?,元組中元素的訪問可以借助于其索引號訪問,例如,a[0]為元組a的第0個元素。第9行“print()”輸出一個空白行。第10行輸出元組a,得到“a=(19,35,7,12,15,29,24,20,30,16,10,21)”。4.1.2元組元素訪問方法第11行“print(f'First:{a[0]},Last:{a[-1]}.')”輸出元組a的首元素和尾元素。第12行“print(a[2:2])”輸出一個空元組。這是因為“2:2”表示索引號從2至1,故將得到一個空元組。因此,使用了“:”訪問元組將返回一個元組。第13行“print(f'a[1]~a[1]:{a[1:2]}')”輸出一個元組,只包含元素a[1]。第14行“print(f'a[3]~a[8]:{a[3:8+1]}')”輸出一個元組,包含元素a[3]至a[8]。4.1.2元組元素訪問方法第15行“print(f'a[3],a[5],a[7]:{a[3:8+1:2]}')”輸出一個元組,包括元素a[3]、a[5]和a[7]。這里的“3:8+1:2”表示索引號從3至8,步長為2。第16行“print(f'a[-1]~a[-4]:{a[-1:-4-1:-1]}')”輸出一個元組,包含元素a[-1]至a[-4]。這里的“-1:-4-1:-1”(即“-1:-5:-1”)表示索引號從-1至-4,步長為-1。4.1.2元組元素訪問方法使用“:”訪問元組的部分內(nèi)容將返回一個新的元組?!癿:n+1:k”表示索引號從m遞增到n,步長為k。如果k為1,可以省略。如果m省略,表示索引號從0開始;如果n+1省略表示索引到元組的最后一個元素。因此,a[:]和a的含義相同,均指整個元組a;而a[::2]表示得到一個新的元組,只包含原元組中偶數(shù)索引號上的元素。4.1.2元組元素訪問方法程序執(zhí)行結(jié)果:模塊zym0403執(zhí)行結(jié)果4.1.3元組元素訪問方法元組的內(nèi)置方法,或稱元組類的內(nèi)置方法,是指元組類內(nèi)部定義的公有方法。Python語言的內(nèi)置函數(shù),可以稱為全局函數(shù)。下面重點介紹表中所示的Python全局函數(shù)在元組上的用法,這里設(shè)元組a=(3,5,7,9)。4.1.3元組元素訪問方法4.1.3元組元素訪問方法1if__name__=='__main__':2a=(3,5,7,9)3s=len(a)4print(f'Lengthofa:{s}.')5print(f'MinandMaxofa:{min(a)},{max(a)}')6del(a)7a=tuple([3,5,7,9])8print(a)4.1.3元組元素訪問方法第2行“a=(3,5,7,9)”定義元組a。第3行“s=len(a)”獲得元組的長度4。第4行“print(f'Lengthofa:{s}.')”輸出“Lengthofa:4.”。第5行“print(f'MinandMaxofa:{min(a)},{max(a)}')”輸出元組a的最小值和最大值,得到“MinandMaxofa:3,9”。第6行“del(a)”刪除元組a。請注意,Python有“垃圾”回收機制,不使用的內(nèi)存“空間”將被自動回收。4.1.3元組元素訪問方法第7行再次對“標(biāo)簽”a賦值,原來的“a”將被自動從內(nèi)存中清除,因此,一般無需使用del函數(shù)。第7行“a=tuple([3,5,7,9])”得到一個新的元組a。注意,這里的a和第2行的a不是同一個a,盡管其內(nèi)容相同。第8行“print(a)”輸出元組a,得到“(3,5,7,9)”。4.1.4元組應(yīng)用實例元組可以視為其元素是常量的特殊“列表”,元組和列表均能“多變量”賦值,所謂的“多變量”賦值例如:[x,y,z]=[1,2,3]#借助于列表實現(xiàn)x=1、y=2和z=3(x,y,z)=(1,2,3)或a=(x,y,z)=(1,2,3)#借助于元組實現(xiàn)x=1、y=2和z=3上式可以簡寫為:x,y,z=1,2,3#借助于元組實現(xiàn)x=1、y=2和z=34.1.4元組應(yīng)用實例上述的“多變量”賦值,將把x、y和z約束為列表或元組的成員,可以直接使用這些變量,但如果給這些“變量”賦值時,實際上創(chuàng)建一個新的同名“變量”。因此,建議創(chuàng)建只讀的“標(biāo)簽”時,可以使用上述的“多變量”賦值,其他情況不建議使用?!岸嘧兞俊辟x值作為“只讀”的“標(biāo)簽”,這種情況最常用于是把元組作為函數(shù)的返回值,可以返回多個數(shù)據(jù)。4.1.4元組應(yīng)用實例例:輸入兩個正整數(shù),計算這兩個整數(shù)的最大公約數(shù)和最小公倍數(shù)1defmygcdlcm(a,b):2ifa>b:3a,b=b,a4ifb==0:5return(b,a)6n=a*b4.1.4元組應(yīng)用實例7whilea%b>0:8r=a%b9a=b10b=r11n=n//b12return(b,n)13if__name__=='__main__':14c=mygcdlcm(8,22)15print(c)4.1.4元組應(yīng)用實例第1~12行為函數(shù)mygcdlcm,具有兩個參數(shù)a和b,使用關(guān)鍵字“def”定義函數(shù)。第2~3行為一個if結(jié)構(gòu),判斷如果a大于b,則將a與b互換。第4~5行為一個if結(jié)構(gòu),判斷如果b為0,則輸出元組(b,a),此時b為最大公約數(shù),a為最小公倍數(shù)。第6行“n=a*b”將a與b的乘積賦給n。4.1.4元組應(yīng)用實例第7~10行為一個while循環(huán),這是求兩個整數(shù)的最大公約數(shù)的Euclid算法,此算法依據(jù)Euclide定理,即a與b的最大公約數(shù)也是b與a%b的最大公約數(shù)。用gcd表示求最大公約數(shù)的函數(shù),則gcd(a,b)=gcd(b,a%b)。一般地,將a與b中的較大者保存在a中,a與b中的較小者保存在b中,迭代公式(a,b)=(b,a%b)直到得到b能整除a,則b為a與b的最大公約數(shù)。這里的“(a,b)=(b,a%b)”表示將b賦給a,同時將a%b賦給b,運算前的a與b和運算后的a與b不占有相同的內(nèi)存空間。4.1.4元組應(yīng)用實例第11行“n=n//b”得到的n為a與b的最小公倍數(shù)。第12行“return(b,n)”返回元組,包含了a與b的最大公約數(shù)和最小公倍數(shù)。第14行“c=mygcdlcm(8,22)”調(diào)用函數(shù)mygcdlcm得到8與22的最大公約數(shù)和最小公倍數(shù),函數(shù)返回值以元組的形式,賦給c。第15行“print(c)”輸出c,得到“(2,88)”。02集合4.2集合Python語言中可定義集合這類數(shù)據(jù)類型。這里的“集合”是指數(shù)學(xué)集合論中的集合,即由一組無重復(fù)的無序元素組成的集合。在Python語言中,用花括號“{}”括起來且用逗號分隔的一組數(shù)據(jù)表示。集合中可以嵌套元組,但不能嵌套列表和另一個集合,這是因為集合的元素一定是確定的元素。集合中的元素沒有順序,無法通過索引號訪問,集合元素的處理需要通過集合的內(nèi)置方法實現(xiàn)。4.2.1集合定義集合由一組沒有重復(fù)的無序元素組成,集合的特點在于其每個元素都是唯一的且確定的。集合中的元素可以取基本類型的常量,也可以取為元組,但不能為列表和集合。下面的程序段展示集合的定義方法。4.2.1集合定義1if__name__=='__main__':2a={1,2,2,1,'a',(3,4),'Python','天空',complex(3,5),2.71}3print('Seta:',a)4b=list(a)5print('Listb:',b)6c=set()4.2.1集合定義7print('Emptyset:',c)8d=set([4,5,6,6,5])9print('Setd:',d)10e=set('anappletree')11print('Sete:',e)12print('Lengthofe:',len(e))4.2.1集合定義第2行“a={1,2,2,1,'a',(3,4),'Python','天空',complex(3,5),2.71}”定義集合a,其中有重復(fù)的元素,在保存時,自動將所有重復(fù)的元素僅保留一個;第3行“print('Seta:',a)”輸出集合a,得到“Seta:{1,2,2.71,(3,4),'天空','a','Python',(3+5j)}”,其中所有元素都是唯一的。第4行“b=list(a)”將集合a轉(zhuǎn)化為列表b;第5行“print('Listb:',b)”輸出列表b。注意,集合a轉(zhuǎn)化為列表b時,列表b將采用當(dāng)前的a的元素存儲順序。4.2.1集合定義第6行“c=set()”創(chuàng)建空集合c。由于集合和第4.3節(jié)的字典都使用花括號作為定界符,因此,一對空的“{}”將創(chuàng)建一個空字典,而非空集合,可能是因為Python設(shè)計人員認(rèn)為字典比集合更重要。第7行“print('Emptyset:',c)”輸出空集合c。第8行“d=set([4,5,6,6,5])”將一個列表轉(zhuǎn)化為集合,賦給d。第9行“print('Setd:',d)”輸出集合d。set是集合類的類名,可以將元組或列表轉(zhuǎn)化為集合。4.2.1集合定義第10行“e=set('anappletree')”將字符串“anappletree”轉(zhuǎn)化為集合,字符串中的每個字符作為集合的元素,并將重復(fù)的多個元素保留一個。第11行“print('Sete:',e)”輸出集合e。第12行“print('Lengthofe:',len(e))”輸出集合e的長度,即集合e的元素個數(shù)。4.2.1集合定義程序執(zhí)行結(jié)果:集合中的元素可為整數(shù)、字符串、單個字符、元組等,也可以為浮點數(shù)和復(fù)數(shù)。使用內(nèi)置函數(shù)len可以獲得集合的元素個數(shù),集合是可迭代的對象。模塊zym0409執(zhí)行結(jié)果4.2.2集合基本操作集合中的元素沒有順序,因此,集合中的元素沒有索引號,無法通過索引號訪問集合元素,只能將集合轉(zhuǎn)化為列表或元組再按索引號訪問各個元素。由于集合中的元素是可數(shù)的,集合也是可迭代對象,可以使用for結(jié)構(gòu)遍歷集合中的元素。集合的常用操作有三種,即集合的并集、交集和補集,后面表列出集合的常用操作,設(shè)全集為w={1,2,3,4,5,6,7,8,9,10},a={3,5,7,9},b={1,3,4,7,8,9}。4.2.2集合基本操作4.2.3集合內(nèi)置方法使用指令“print(dir(set))”可以查看集合類set的內(nèi)置公有方法。集合類內(nèi)置公有方法:4.2.3集合內(nèi)置方法4.2.3集合內(nèi)置方法4.2.4集合應(yīng)用實例現(xiàn)商場有一個抽獎游戲,箱子中有10張卡片,上面的數(shù)字為從1至10(無重復(fù))。在商場消費后可有一次抽獎機會,從箱子中一次性取出3張卡片,將三張卡片上的數(shù)字相加,按其總和進(jìn)行領(lǐng)獎,若總和在5至15(含)間為三等獎,總和在16至21(含)間為二等獎,總和在22至27(含)間為一等獎。程序段4-12模擬了這一抽獎過程。4.2.4集合應(yīng)用實例1importrandom2if__name__=='__main__':3st=input('Begin(y/n)?')4whilest=='y':5points=set()6whilelen(points)<3:7x=random.randint(1,10)8points.add(x)4.2.4集合應(yīng)用實例9s=sum(points)10if5<=s<=15:11print(f'sum={s}.Thethridprize.')12elif16<=s<=21:13print(f'sum={s}.Thesecondprize.')14else:15print(f'sum={s}.Congratulations.Thefirstprize.')16st=input('Tryagain(y/n)?')4.2.4集合應(yīng)用實例程序執(zhí)行結(jié)果:進(jìn)行了5次抽獎實驗,每次實驗均給出了抽取到的3張卡片上的數(shù)字和。模塊zym0412執(zhí)行結(jié)果03字典4.3字典在Mathematica軟件中,有一種數(shù)據(jù)類型,稱為關(guān)聯(lián)。關(guān)聯(lián)有兩部分組成,合稱為“鍵—值對”,關(guān)聯(lián)和Python語言中的“字典”數(shù)據(jù)類型相似。字典的鍵類似于集合只能取基本數(shù)據(jù)類型或元組。由于“鍵”用于訪問其對應(yīng)的“值”,“鍵”應(yīng)取得簡單、易記、可讀性強,且不能重復(fù)。字典創(chuàng)建好后,其“鍵”不能修改,但是“鍵”對應(yīng)的“值”可以修改。4.3.1字典定義字典的類型為dict類,每個字典數(shù)據(jù)為dict類定義的對象。簡單地講,字典是形如以下形式的數(shù)據(jù)表示:{鍵1:值1,鍵2:值2,鍵3:值3,……,鍵n:值n}字典中的所有“鍵”必須是唯一的,“鍵”只能為基本數(shù)據(jù)類型或元組(要求:元組幫為“鍵”時,元組的元素必須為確定性,而應(yīng)盡可能具有易記和可讀性強的特點。例如,如果“鍵”取為0、1、2、…,這樣的字典和列表在功能上沒有太大區(qū)別,因此,不是好的字典定義方式。4.3.1字典定義字典的定義方法:1if__name__=='__main__':2d1={'Apple':4.5,'Pear':3.8,'Peach':6.5}3print('d1=',d1)4d2={(1,2):'語文',(3,4):'數(shù)學(xué)',(5,6):'化學(xué)',(7,8):'物理'}5print('d2=',d2)6d3={}7print('Typeofd3:',type(d3))4.3.1字典定義8d4=dict(a=6,b=[5,4],c={3,2},d=(1,0),Else={'job':'student'})9print('d4=',d4)10d5=dict([('a',6),('b',[5,4]),('c',{3,2}),('d',(1,0)),('Else',{'job':'student'})])11print('d5=',d5)12d6={x:2*xforxin[4,5,6]}13print('d6=',d6)4.3.1字典定義14d7={x:2*xforxin(4,5,6)}15print('d7=',d7)16d8={x:d1[x]forxind1}17print('d8=',d8)18d9={'Tom':5,'Jerry':4,'Dog':6,'Jerry':5}19print('d9=',d9)4.3.1字典定義程序執(zhí)行結(jié)果如下:模塊zym0413執(zhí)行結(jié)果4.3.2字典基本操作字典元素的訪問方法有三種:(1)借助于“鍵”訪問。如果字典對象為d,“鍵”名為“key”,則d['key']得到該“鍵”對應(yīng)的“值”。該方式下,如果“鍵”不存在,將報錯;(2)借助于字典內(nèi)置的get方法訪問。設(shè)字典對象為d,“鍵”名為“key”,則d.get('key')得到該“鍵”對應(yīng)的“值”。該方式下,如果“鍵”不存在,則返回None;(3)在for循環(huán)中遍歷字典元素。4.3.2字典基本操作借助于for循環(huán)遍歷字典中的元素,也有三種方式,仍設(shè)字典對象為d,則三種方式依次為:(1)遍歷字典中的“鍵”,如“foreind:”或“foreind.keys():”;(2)遍歷字典中的“值”,如“foreind.values():”;(3)同時遍歷字典中的“鍵值對”,如“foreind.items():”。4.3.2字典基本操作1if__name__=='__main__':2d1={'Apple':4.5,'Pear':3.8,'Peach':6.5,'Banana':5.2}3print(f"Apple'sprice:{d1['Apple']}.")4print(f"Apple'sprice:{d1.get('Apple')}.")5foreind1:6ife=='Apple':7print(f"{e}'sprice:{d1[e]}.")8foreind1.keys():4.3.2字典基本操作9ife=='Apple':10print(f"{e}'sprice:{d1[e]}.")11s=012foreind1.values():13s=s+e14print(f'Totalprice:{s}.')15foreind1.items():16print(e)17ife[0]=='Apple':4.3.2字典基本操作18print(f"{e[0]}'sprice:{e[1]}.")19d1['Apple']=7.820print('d1=',d1)21d1['Strawberry']=9.122print('d1=',d1)23ifd1.get('Watermelon')==None:24print('Nowatermelon.')25else:26print('Havewatermelon.')4.3.2字典基本操作程序執(zhí)行結(jié)果:模塊zym0414執(zhí)行結(jié)果4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)字典內(nèi)置方法是指字典類中的公有方法,這類方法由字典調(diào)用;內(nèi)置函數(shù)指Python語言的內(nèi)置函數(shù),可以作用于Python語言中的各種數(shù)據(jù)類型定義的對象。Python語言中常用于字典的內(nèi)置函數(shù)如表所示。表中設(shè)字典為d。4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)用于字典的內(nèi)置函數(shù):序號函數(shù)名含義實例1len統(tǒng)計字典中的元素個數(shù)(字典的一個“元素”是指一個“鍵值對”)len(d)返回d的元素個數(shù)2sum求字典的“鍵”或“值”的和(要求“鍵”和“值”必須為數(shù)值類型)sum(d)和sum(d.keys())含議相同,用于計算“鍵”的和;sum(d.values())用于計算“值”的和3type返回字典的類型type(d)返回“<class'dict'>”4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)序號函數(shù)名含義實例4isinstance判斷參數(shù)的類型isinstance(d,dict)返回True5str將字典轉(zhuǎn)化為字符串str(d)返回一個字符串d6zip將多個列表或元組組合成一個以元組為元組的可迭代器,該迭代器的第i個元組的元素由各個列表或元組的第i個元素組成。只有組合了兩個列表或元組的zip才能轉(zhuǎn)化為字典foreinzip([1,2,3],(4,5,6),[7,8,9]):print(e)上述代碼得到(1,4,7),(2,5,8),(3,6,9)當(dāng)zip組合兩個列表或元組時,可借助于dict將zip對象轉(zhuǎn)化為字典,這是一種生成字典的快捷方法4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)字典類內(nèi)置公有方法序號方法名含義實例1get以字典的“鍵”為參數(shù),返回字典中該“鍵”對應(yīng)的“值”d.get('a')得到12values返回字典的全部“值”組成的對象,常需借助于list轉(zhuǎn)化為列表list(d.values())得到[1,2,3]3keys返回字典的全部“鍵”組成的對象,常需借助于list轉(zhuǎn)化為列表list(d.keys())得到['a','b','c']4items返回字典的全部元素組成的對象,每個元素為一個“鍵值對”,并將“鍵”和“值”組合為一個元組。常借助于list轉(zhuǎn)化為列表list(d.items)得到[('a',1),('b',2),('c',3)]4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)5setdefault以“鍵”和“值”作為參數(shù),將兩者組成的“鍵值對”添加到字典中,如果“值”省略,則將None作為該“鍵”的值d.setdefault('d',4),此后的d為{'a':1,'b':2,'c':3,'d':4}6update以一個字典作為參數(shù),將該字典中的全部元素添加到調(diào)用該函數(shù)的字典中d.update({'d':4,'e':5}),執(zhí)行后的d為{'a':1,'b':2,'c':3,'d':4,'e':5}7fromkeys第一個參數(shù)可以為列表、元組或集合,這個參數(shù)的每個元素將作為“鍵”;第二個參數(shù)指定這些“鍵”的值,這個參數(shù)將作為所有“鍵”的值。如果第二個參數(shù)省略,每個“鍵”的“值”將設(shè)為Nonee=dict.fromkeys(['a','b','c'],1),將得到字典e為{'a':1,'b':1,'c':1};而e=dict.fromkeys(['a','b','c']),將得到字典e為{'a':None,'b':None,'c':None}4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)8copy將一個字典復(fù)制到另一個字典。這是一種“深”復(fù)制(或稱“探”拷貝),即“深”復(fù)制后兩個字典占有不同的存儲空間,互不影響e=

d.copy()print(id(e))print(id(d))#d和e占不同內(nèi)存e['a']=3print(d)print(e)#d和e互不影響這時,e與d內(nèi)容相同,但e與d占有不同內(nèi)存空間,故互不影響。對e修改后,不影響d9=對比copy,“=”是一種“淺”復(fù)制,即“淺”復(fù)制后兩個字典共用一個存儲空間,互相影響e=d#淺復(fù)制print(id(e))print(id(d))#d和e內(nèi)存相同e['a']=3print(d)print(e)對e的“鍵”a賦值3,將同時影響到d,此時的d為{'a':3,'b':2,'c':3}4.3.3字典內(nèi)置方法與內(nèi)置函數(shù)10clear清空字典d.clear()后d為空字典“{}”11pop以字典的“鍵”為參數(shù),刪除該“鍵”對應(yīng)的“值”,該“值”作為pop函數(shù)的返回值。如果“鍵”不存在,將報錯print(d.pop('a'))#輸出1print(d)#輸出{'b':2,'c':3}12popitem刪除字典中的最后一個元素,并將該元素轉(zhuǎn)化為一個元組作為返回值print(d.popitem())#輸出('c',3)print(d)#輸出{'a':1,'b':2}4.3.4字典應(yīng)用實例字典在處理具有多種屬性的“對象”時具有優(yōu)勢,例如,要顯示一個學(xué)生的基本信息,例如,姓名、年齡、性能和身高等,用字典比用列表更加方便?,F(xiàn)有如表所示的幾個學(xué)生信息,使用程序段對其進(jìn)行存儲和輸出。姓名年齡性別愛好張飛18男籃球、唱歌關(guān)羽19男籃球、足球貂蟬17女繪畫、跳舞4.3.4字典應(yīng)用實例1if__name__=='__main__':2students={'張飛':{'年齡':18,'性別':'男','愛好':'籃球、唱歌'},3'關(guān)羽':{'年齡':19,'性別':'男','愛好':'籃球、足球'},4'貂蟬':{'年齡':17,'性別':'女','愛好':'繪畫、跳舞'}}4.3.4字典應(yīng)用實例6for(c1,c2)instudents.items():7print('姓名:'+c1,sep='')8age=str(c2['年齡'])9gender=c2['性別']10hobby=c2['愛好']11print(f'年齡:{age},性別:{gender},愛好:{hobby}')12print()4.3.4字典應(yīng)用實例程序執(zhí)行結(jié)果:模塊zym0416執(zhí)行結(jié)果04典型實例4.4典型實例程序=數(shù)據(jù)+算法。通過前述內(nèi)容,可知Python語言具有高級的數(shù)據(jù)表示能力,其內(nèi)置的列表、元組、集合和字典數(shù)據(jù)類型等,遠(yuǎn)遠(yuǎn)超過了其他計算機語言數(shù)據(jù)表示的能力。4.4典型實例字典與列表嵌套使用實例實例:包括以下兩部分內(nèi)容:(1)列表中嵌入字典:電子書日漸普及,方便了學(xué)生利用碎片化的時間閱讀。這里首先為每本電子書創(chuàng)建一個字典,包括書名和作者;然后,創(chuàng)建一個列表包含所有電子書的字典;最后,通過列表輸出各本電子書的信息。(2)字典中嵌入列表:下表列舉了幾位小朋友喜歡的菜名。4.4典型實例將表設(shè)計成一個字典,表中的每行為字典的一個元素。其中,每個元素的“值”用列表表示。最后,通過檢索字典得到所有小朋友喜歡的菜品。姓名菜品名琳琳青椒炒肉、小雞燉蘑菇朵朵西紅柿炒蛋、回鍋肉、素什錦丁丁蒜蓉炒蝦、麻婆豆腐4.4典型實例1if__name__=='__main__':2book01={'bookname':'吶喊','author':'魯迅'}3book02={'bookname':'邊城','author':'沈從文'}4book03={'bookname':'活著','author':

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論