Python程序設(shè)計(含視頻分析) 課件 第5章 結(jié)構(gòu)化類型_第1頁
Python程序設(shè)計(含視頻分析) 課件 第5章 結(jié)構(gòu)化類型_第2頁
Python程序設(shè)計(含視頻分析) 課件 第5章 結(jié)構(gòu)化類型_第3頁
Python程序設(shè)計(含視頻分析) 課件 第5章 結(jié)構(gòu)化類型_第4頁
Python程序設(shè)計(含視頻分析) 課件 第5章 結(jié)構(gòu)化類型_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

主講教師:單

位:Python程序設(shè)計方法第5章結(jié)構(gòu)化類型第5章結(jié)構(gòu)化類型5.1字符串5.2列表5.3元組5.4字典5.5集合5.6簡單算法第5章結(jié)構(gòu)化類型5.1字符串5.1字符串5.1.1字符串字面量5.1.2字符串的基本操作5.1.3字符串方法5.1.4字符串應(yīng)用5.1字符串字符串是一種序列,是一個有序的字符集合,用來存儲和表示基于文本和字節(jié)的信息。大部分標(biāo)準(zhǔn)序列操作如索引、分片、乘法、成員資格檢查、求長度、求最小值和最大值等都適用于字符串。字符串是str類的對象,是不可變對象,因此所有改變字符串值的操作如元素賦值和分片賦值都是非法的。5.1.1字符串字面量Python允許字符串包括在單引號或雙引號中,也允許在三個引號(單引號或雙引號)中包括多行字符串字面量。采用不同的引號可以讓另外一種引號被包含在其中。可以使用反斜杠來引入特殊的字符編碼,或者稱為轉(zhuǎn)義序列。以字母“r”開頭表示原始字符串字面量。如r"c:\new\test.py"表示c:\new\test.py5.1.2字符串的基本操作1.創(chuàng)建字符串可以使用str類的構(gòu)造函數(shù)或直接使用字符串值創(chuàng)建字符串,例如:創(chuàng)建一個空字符串s1=str()或者s1=""創(chuàng)建一個內(nèi)容為"Welcome"的字符串s2=str("Welcome")或者s2="Welcome"5.1.2字符串的基本操作1.創(chuàng)建字符串一個字符串對象具有不可變性,一旦創(chuàng)建了一個字符串對象出來,就不能在原位置改變其內(nèi)容。具有相同內(nèi)容的字符串對象指向同一個字符串對象。例如:s1=""s2="Welcome"s3="Welcome"s4="Hello"則s2和s3指向同一個對象5.1.2字符串的基本操作2.索引字符串是字符的有序集合,因此可以通過位置訪問他們的元素。在Python中,字符串中的字符是通過索引來獲取的,可以使用下標(biāo)運(yùn)算符[]訪問字符串中的一個字符。假設(shè)s=“HelloWorld!",s中每個字符對應(yīng)的位置及其索引如下所示:【程序5-1】字符串變換從鍵盤輸入一串字符,將大寫字母變?yōu)樾懽帜?,小寫字母變?yōu)榇髮懽帜福渌址蛔?。輸出變換后的字符串。s=input("請輸入字符串:")news=''foriinrange(0,len(s)):offset=ord('a')-ord('A')if'a'<=s[i]<='z':news=news+chr(ord(s[i])-offset)elif'A'<=s[i]<='Z':news=news+chr(ord(s[i])+offset)else:news=news+s[i]print("轉(zhuǎn)換后的字符串為:"+news)【程序5-2】變換輸出字符串輸入一個字符串,頭尾間隔交錯輸出。s=input("請輸入字符串:")print("轉(zhuǎn)換后的字符串為:",end="")foriinrange(0,len(s)//2):print(s[i]+s[-(i+1)],end="")iflen(s)%2==0:print()else:print(s[i+1])5.1.2字符串的基本操作3.分片s為字符串,分片運(yùn)算符s[start:end]返回字符串s從下標(biāo)start到end-1的一個子串,start省略,默認(rèn)起始下標(biāo)為0,end省略,默認(rèn)結(jié)束下標(biāo)是最后一個下標(biāo),start和end也都可以使用負(fù)數(shù)。也可以使用加步長的分片操作,s[start:end:step]表示從下標(biāo)start開始到下標(biāo)end-1為止,每隔step個元素索引一次例如:s="WelcometoPython"操作結(jié)果操作結(jié)果s[1:4]'elc's[0:-1]'WelcometoPytho's[8:10]'to's[-6:]'Python's[:10]'Welcometo's[-6:-4]'Py's[11:]'Python's[-6:-8]''s[:]'WelcometoPython's[:-5]'WelcometoP's[0:12:2]'Wloet's[::2]'Wloet's[0:len(s)-1:2]'Wloet's[::-1]'nohtyPotemocleW'5.1.2字符串的基本操作4.連接運(yùn)算符+和重復(fù)運(yùn)算符*連接運(yùn)算符+可連接兩個字符串,重復(fù)運(yùn)算符*連接相同的字符串多次。s1="Welcome"s1*3或者3*s1

結(jié)果為'WelcomeWelcomeWelcome's1="Welcome"s2="Python"s3=s1+"to"+s2s3的內(nèi)容為'WelcometoPython'a=10b=15str(a)+"+"+str(b)+"="+str(a+b)結(jié)果為'10+15=25'5.1.2字符串的基本操作5.in和notin運(yùn)算符可以使用in和notin操作來測試一個字符串是否在另一個字符串中,結(jié)果返回True或者False。>>>s="WelcometoPython">>>s1="Python">>>s2="python">>>s3="come">>>s4="Java">>>s1insTrue>>>s2insFalse>>>s3insTrue>>>s4notinsTrue5.1.2字符串的基本操作6.比較運(yùn)算符可以使用比較運(yùn)算符>、>=、<=、==、!=對字符串進(jìn)行比較,Python是通過比較字符串中對應(yīng)的字符的ASCII碼進(jìn)行比較的。首先從第一個字符開始比較,直至兩個字符不同或一個字符串已經(jīng)結(jié)束。例:"abcde">"abc",結(jié)果返回True。"bc">"abc",結(jié)果返回True。"abc">"Abcd",結(jié)果返回True。"123">"ABCDEF",結(jié)果返回False。5.1.2字符串的基本操作7.迭代字符串一個字符串是可迭代的。可用for循環(huán)遍歷字符串。s="Welcome"#輸出s中每個字符的ASCII碼forxins:

print(ord(x),end="")輸出結(jié)果:87101108991111091015.1.2字符串的基本操作8.字符串處理函數(shù)在Python中有內(nèi)置的函數(shù)對字符串進(jìn)行處理。假設(shè)s="HelloWorld!",字符串的內(nèi)置函數(shù)應(yīng)用如表5-3所示。5.1.3字符串方法Python中的字符串有很多方法一般格式: mystring.method(arguments)mystring是引用字符串的變量,method是被調(diào)用的方法名稱,arguments是傳遞到方法的一個或多個參數(shù)。有些方法是測試字符串的具體特性如果條件存在返回True,否則返回Fasle。5.1.3字符串方法5.1.3字符串方法5.1.3字符串方法【程序5-3】愷撒密碼愷撒密碼是一種加密技術(shù),在該技術(shù)中,消息中的每一個字母都由字母表上向后偏移固定數(shù)值位置的字母代替。這個“固定數(shù)”被稱為密鑰,它的值從1到25。例如,如果密鑰為4,則字母A替換成E、B替換為F、C替換為G,以此類推,而字母表尾部的字符W、X、Y和Z替換為A、B、C和D。#愷撒密碼s=input("輸入明文:")key=int(input("輸入密鑰(1-25之間的數(shù)字):"))str=''#對輸入的明文字符串中的字符逐個進(jìn)行判斷forxins:#如果這個字符是字母則進(jìn)行轉(zhuǎn)換ifx.isalpha():#如果這個字符是小寫字母則返回Trueifx.islower():#獲取小寫字母‘a(chǎn)'的ASCII碼start=ord('a')#如果這個字符串是大寫字母則返回Trueelifx.isupper():#獲取大寫字母‘A'的ASCII碼start=ord('A')#將該字符加上密鑰數(shù)字后轉(zhuǎn)換為字符str=str+chr((ord(x)-start+key)%26+start)else:str=str+xprint(str)【程序5-4】提取文件名有一字符串filename=“hello.py”,表示一個文件的文件名,判斷該文件是否是Python文件,如是,則提取文件名。filename="hello.py"iffilename.endswith(".py"):#判斷字符串是否以".py"結(jié)尾index=filename.find(".py")#獲取子串".py"在原字符串中的最低下標(biāo)fname=filename[:index]#分片獲取文件名print("去掉后綴的文件名為:",fname)join()和split()方法join()方法可以將一個字符串列表連接起來成為一個字符串,然后返回該字符串,如:','.join(['cats','rats','bats']),將'cats'、'rats'和'bats'三個字符串之間用“,”進(jìn)行連接,返回的字符串是'cats,rats,bats'。join()方法針對一個字符串調(diào)用,并且需要傳入一個列表值,字符串被插入到列表參數(shù)中每個字符串的中間,然后返回一個字符串。'-'.join(['2021','10','01'])返回'2021-10-01'split()針對一個字符串調(diào)用,返回一個字符串列表,可以傳入一個分隔字符串。'2021-10-01'.split('-')返回['2021','10','01']5.1.4字符串應(yīng)用【程序5-6】回文判斷?!境绦?-7】密碼隨機(jī)生成器。第5章結(jié)構(gòu)化類型5.2列表5.2列表5.2.1列表簡介

5.2.2列表運(yùn)算5.2.3列表方法5.2.4復(fù)制列表5.2.5列表和函數(shù)5.2.6二維列表5.2.1列表簡介序列[10,20,30,40]為包含4個為整數(shù)的元素的列表。序列['crunchyfrog','rambladder','larkvomit']包含3個字符串的列表。序列['spam',2.0,5,[10,20]]包含一個字符串、一個浮點(diǎn)數(shù)、一個整數(shù)和另一個列表,包含了多種類型的值的列表。5.2.2列表運(yùn)算列表運(yùn)算符有:下標(biāo)運(yùn)算符列表截取+*n/notin運(yùn)算符for循環(huán)進(jìn)行遍歷比較運(yùn)算符(>、>=、<、<=、==、!=)5.2.2列表運(yùn)算1.創(chuàng)建列表可以使用list類的構(gòu)造方法,也可以使用[]來表示。操作結(jié)果list1=list()#創(chuàng)建了一個空列表[]list2=list([2,3,4])#創(chuàng)建了一個元素為2,3,4的列表[2,3,4]list3=(['one','two','three'])#創(chuàng)建了一個元素為字符串的列表['one','two','three']list4=list(range(2,5))#創(chuàng)建了一個元素為2,3,4的列表[2,3,4]list5=list("hello")#創(chuàng)建了一個元素為字符h,e,l,l,o的列表['h','e','l','l','o']list6=[]#創(chuàng)建了一個空列表[]list7=[2,3,4]#創(chuàng)建了一個元素為2,3,4的列表[2,3,4]list8=['red','blue','green']#創(chuàng)建了一個元素為字符串的列表['red','blue','green']5.2.2列表運(yùn)算1.創(chuàng)建列表可以使用列表推導(dǎo)創(chuàng)建順序元素的列表。列表推導(dǎo)是通過對序列中的每一項應(yīng)用一個表達(dá)式來構(gòu)建一個新的列表的方式。一個列表推導(dǎo)由多個方括號組成,方括號內(nèi)包含后跟一個for子句的表達(dá)式,之后是0或多個for或if子句。列表推導(dǎo)可以產(chǎn)生一個由表達(dá)式求值結(jié)果組成的列表。列表推導(dǎo)語句的語法格式如下:[<表達(dá)式>for<項>in<序列/迭代器>if<條件>]語句的計算結(jié)果為一個列表,通過<表達(dá)式>到<序列/迭代器>的滿足<條件>的項來生成新列表的項。5.2.2列表運(yùn)算使用列表推導(dǎo)創(chuàng)建順序元素的列表。操作結(jié)果list1=[xforxinrange(5)][0,1,2,3,4]list2=[2*xforxinlist1][0,2,4,6,8]list3=[xforxinrange(10)ifx%2==0][0,2,4,6,8]list4=[x+2forxin[yforyinrange(1,10)ify%2!=0]][3,5,7,9,11]list5=[x+yforxin[10,20]foryinlist1][10,11,12,13,14,20,21,22,23,24]res=[c*4forcin'SPAM']['SSSS','PPPP','AAAA','MMMM']list7=[2,3,4][2,3,4]list8=['red','blue','green']['red','blue','green']5.2.2列表運(yùn)算2.列表常用運(yùn)算符和操作5.2.2列表運(yùn)算2.列表常用運(yùn)算符和操作s=['a','b','c','d','e','f','g','h']print(s[3:5])print(s[1:7])運(yùn)行結(jié)果為:['d','e']['b','c','d','e','f','g']print(s[:])print(s[:5])print(s[:-1])print(s[4:])print(s[-3:])print(s[2:5])print(s[2:-1])print(s[-3:-1])運(yùn)行結(jié)果為:['a','b','c','d','e','f','g','h']['a','b','c','d','e']['a','b','c','d','e','f','g']['e','f','g','h']['f','g','h']['c','d','e']['c','d','e','f','g']['f','g']print("修改前列表s:",s,",長度是:",len(s))s[2:6]=['x','y','z']print("修改后列表s:",s,",長度是:",len(s))s[2:3]=['t']*4print("修改后列表s:",s,",長度是:",len(s))運(yùn)行結(jié)果為:修改前列表s:['a','b','c','d','e','f','g','h'],長度是:8修改后列表s:['a','b','x','y','z','g','h'],長度是:7修改后列表s:['a','b','t','t','t','y','z','g','h'],長度是:95.2.2列表運(yùn)算3.將字符串分成列表可以使用split()方法將字符串分割成一個列表。s.split(d):使用d作為分隔符拆分字符串s,返回一個字符串列表。如果d被省略,則使用任意空白字符串拆分子字符串。操作結(jié)果"apple#banana#cherry#orange".split('#')['apple','banana','cherry','orange']"Hellothere".split('')['Hello','there']items="Welcometopython!"list1=items.split()['Welcome','to','python!']"12:43:39".split(":")['12','43','39']list2="2021/3/14".split("/")['2021','3','14']list3=[eval(x)forxinlist2][2021,3,14]【程序5-8】從鍵盤輸入數(shù)個整數(shù),求其和。s=input("輸入數(shù)據(jù),以空格隔開:")data=[eval(x)forxins.split()]print("和為:",sum(data))運(yùn)行結(jié)果:輸入數(shù)據(jù),以空格隔開:1031249和為:295.2.3

列表方法列表是list類,創(chuàng)建后就可以使用list類的方法來操作列表?!境绦?-9】判斷一個句子中每個單詞出現(xiàn)的次數(shù)。#輸入一個句子,每個單詞間用空格隔開s=input()slist=s.split()#使用空格分離出每個單詞#創(chuàng)建一個空列表,存放字符串中的單詞表sset=[]forxinslist:#去掉重復(fù)出現(xiàn)的單詞ifxnotinsset:sset.append(x)print("原字符串:",s)forxinsset:#使用列表count()方法計算每個單詞在單詞列表中出現(xiàn)的次數(shù)print(x,"在字符串中出現(xiàn)",slist.count(x))運(yùn)行結(jié)果:原字符串:redyellowblueredredblueyellowredred在字符串中出現(xiàn)4yellow在字符串中出現(xiàn)2blue在字符串中出現(xiàn)2red在字符串中出現(xiàn)4red在字符串中出現(xiàn)4blue在字符串中出現(xiàn)2yellow在字符串中出現(xiàn)2red在字符串中出現(xiàn)45.2.3

列表方法append()方法和extend()方法都可以在列表末尾添加元素append()方法可傳入任意一個對象,但extend()必須傳入一個可迭代對象extend()方法總是循環(huán)訪問傳入的可迭代對象,并逐個把產(chǎn)生的元素添加到列表尾部append()方法會直接把這個傳入的迭代對象添加到尾部而不會遍歷它extend()方法會添加多個元素,而append()方法只能添加一個元素。

res=['SSSS','PPPP','AAAA','MMMM']res.extend("BBBB")print(res)res=['SSSS','PPPP','AAAA','MMMM']res.append("BBBB")print(res)運(yùn)行結(jié)果:['SSSS','PPPP','AAAA','MMMM','B','B','B','B']['SSSS','PPPP','AAAA','MMMM','BBBB']5.2.4

復(fù)制列表為了將一個列表中的數(shù)據(jù)復(fù)制給另一個列表,必須將元素逐個地從源列表復(fù)制到目標(biāo)列表,可以使用多種方法:例:將list1的內(nèi)容復(fù)制給list2方法1:list2=[xforxinlist1]方法2:list2=[]+list1方法3:list2=list1[:]方法4:list2=[]forxinlist1:

list2.append(x)方法5:list2=[]list2.extend(list1)5.2.5

列表和函數(shù)列表是一個對象,將列表傳遞給函數(shù)就如同給函數(shù)傳遞一個對象,列表的值在函數(shù)內(nèi)可以改變。在調(diào)用函數(shù)時,可以傳遞列表參數(shù)。函數(shù)也可以返回列表?!境绦?-10】產(chǎn)生一個包含20個斐波那契數(shù)的列表?!境绦?-11】隨機(jī)產(chǎn)生20個1-20之內(nèi)的數(shù),去掉列表中重復(fù)的數(shù)得到一個新列表,按升序輸出。【程序5-12】隨機(jī)生成100個小寫字母的序列,然后統(tǒng)計每個字母在該序列中出現(xiàn)的次數(shù)。5.2.6

二維列表二維列表即是一個列表中嵌套了另一個列表。如果使用一次索引,會得到一整行,如果使用兩次索引,會得到某一行里的其中一項。matrix=[[1,2,3],[4,5,6],[7,8,9]]列表中的每個值都可以用matrix[i][j]來訪問,i,j分別是行下標(biāo)和列下標(biāo)?!境绦?-13】輸入一個二維列表,其所有元素都是整數(shù),分別進(jìn)行以下操作:(1)對所有元素求和(2)求出最大值及其所在位置(3)按行求和(4)按列求和第5章結(jié)構(gòu)化類型5.3元組5.3元組5.3.1元組與列表的區(qū)別5.3.2元組使用5.3.3序列的異同和轉(zhuǎn)換5.3元組元組(tuple)是一些元素的不可變有序序列。與字符串的區(qū)別是,元組中的元素不一定是字符,其中的單個元素可以是任意類型,且它們彼此之間的類型也可以不同。5.3.1元組與列表的區(qū)別元組與列表相似,也是用來存儲一個數(shù)據(jù)的序列,但元組中的元素是固定的,也就是一旦一個元組被創(chuàng)建,元組中的元素就不可變,不能對元組中的元素進(jìn)行添加、刪除、替換或重新排列。元組用圓括號組織一系列項,而列表使用方括號如果在應(yīng)用中不應(yīng)該對列表中的內(nèi)容進(jìn)行修改,則可以使用元組來防止元素被更改。除了更改元素的操作外,能對列表進(jìn)行的操作也都適用于元組,但元組比列表的效率更高。字典的鍵可以使用元組而不能使用列表。一般來說,列表是適用于可能需要進(jìn)行修改的有序集合,而元組能夠處理其他固定關(guān)系的情況。5.3.2元組使用可以通過將元素用一括號括起來來創(chuàng)建一個元組,這些元素用逗號分隔。元組可以進(jìn)行連接、索引和切片等操作,但與列表不同的是,這些操作應(yīng)用于元組時會返回新的元組。x=(40)#x是一個整數(shù)40y=(40,)#y是一個包含一個整數(shù)40的元組(1,2)+(3,4)#返回新的元組(1,2,3,4)(1,2)*4#返回新的元組(1,2,1,2,1,2,1,2)T=(1,2,3,4)T[0],T[1:3]#返回(1,(2,3))5.3.2元組使用常見的元組字面量和運(yùn)算操作結(jié)果()空元組T=(0,)單個元素的元組(非表達(dá)式)T=(0,'Ni',1.2,3)四個元素的元組T=0,'Ni',1.2,3另一種四個元素的元組(不建議使用)T=('Bob',('dev','mgr'))嵌套元組T=tuple('spam')一個可迭代對象的元素組成的元組('s','p','a','m')T[i]返回元組的第i個元素T[i][j]返回元組第i個元素中的第j個元素T[i:j]返回元組的一個分片len(T)返回元組長度5.3.2元組使用常見的元組字面量和運(yùn)算操作結(jié)果T1+T2返回兩個元組連接后的新元組T*n返回一個重復(fù)了n次T元組的新元組forxinT:print(x)遍歷元組中的所有元素einT如果元組包含e,則返回True,否則返回FalseenotinT如果元組不包含e,則返回True,否則返回False元組有兩個專有的方法:若T=(1,2,3,4,3),則T.index(3)返回2,即為數(shù)據(jù)項3在元組中第一個出現(xiàn)的位置序號。T.count(3)返回2,即為數(shù)據(jù)項3在元組中出現(xiàn)的次數(shù)。5.3.3序列的異同和轉(zhuǎn)換序列類型主要有字符串(str類)、列表(list類)、元組(tuple類)字符串和元組都是不可變類,不能直接在原位置對元素的內(nèi)容進(jìn)行修改,引起改變序列內(nèi)容的操作一般會返回一個新的序列。列表是可變類,允許對列表中的元素內(nèi)容進(jìn)行直接修改。5.3.3序列的異同和轉(zhuǎn)換序列之間可以進(jìn)行相互轉(zhuǎn)換:join()方法可將列表轉(zhuǎn)換為字符串。list和tuple內(nèi)置函數(shù)用來將對象轉(zhuǎn)換成列表,或轉(zhuǎn)換回元組。列表推導(dǎo)也可以用來轉(zhuǎn)換元組。操作結(jié)果s='HelloWorld!'list(s)將字符串轉(zhuǎn)換為列表['H','e','l','l','o','','W','o','r','l','d','!']T=("aa","bb","cc","dd")L=list(T)元組轉(zhuǎn)換為列表L['aa','bb','cc','dd']L=['H','e','l','l','o','','W','o','r','l','d','!']"".join(L)將列表連接為字符串'HelloWorld!'L=['aa','bb','cc','dd']T=tuple(L)列表轉(zhuǎn)換為元組T('aa','bb','cc','dd')T=(1,2,3,4,5)L=[x+20forxinT]從元組產(chǎn)生列表,并在過程中將每一項都加上20

L結(jié)果為:[21,22,23,24,25]第5章結(jié)構(gòu)化類型5.4字典5.4字典5.4.1創(chuàng)建字典5.4.2字典操作5.4.3常用字典方法5.4字典字典是Python中唯一的內(nèi)置映射類型,其中的值不按順序排列,而是存儲在鍵下。字典的類型名是dict,當(dāng)寫成字面量表達(dá)式時,字典以一系列“鍵:值”(key:value)對形式寫出,每一對之間用逗號隔開,最外面用大括號括起來。鍵為不可變類型,可以是數(shù)、字符串或元組。字典當(dāng)中的元素是通過鍵來存取的。字典中的項是不排序的。monthNumbers={'Jan:':1,'Feb':2,'Mar':3,'Apr':4,'May':5,1:'Jan',2:'Feb',3:'Mar',4:'Apr',5:'May'}monthNumbers[‘Jan’]的值為1,monthNumbers[‘May’]的值為5,monthNumbers[1]的值為’Jan’,monthNumbers[3]的值為’Mar’。5.4.1創(chuàng)建字典字典由鍵及其相應(yīng)的值組成,這種鍵-值對稱為項。每個鍵與其值之間都用冒號(:)分隔,項之間用逗號分隔,而整個字典放在花括號內(nèi)??兆值溆脙蓚€花括號{}表示。在字典中,鍵是唯一的,而值可以重復(fù)??梢允褂煤瘮?shù)dict從其他映射或鍵-值對序列創(chuàng)建字典。操作結(jié)果D={}創(chuàng)建一個空字典D={"name":'Bob',"age":40}創(chuàng)建了一個兩個項的字典E={'cto':{"name":'Bob',"age":40}}創(chuàng)建了值為字典的字典D=dict(name='Bob',age=40)創(chuàng)建字典{'name':'Bob','age':40}D=dict([('name','Bob'),('age',40)])創(chuàng)建字典{'name':'Bob','age':40}5.4.2字典操作操作結(jié)果D={}空字典D={"name":'Bob',"age":40}有兩個元素的字典E={'cto':{"name":'Bob',"age":40}}嵌套D=dict(name='Bob',age=40)其他構(gòu)造方法:關(guān)鍵字D=dict([('name','Bob'),('age',40)])鍵值對D=dict(zip(keylist,valslist))拉鏈?zhǔn)芥I值對D=dict.fromkeys(['a','b'])鍵列表D['name']通過鍵索引E['cto']['age']嵌套索引'age'inD成員關(guān)系:鍵存在測試D.keys()方法:所有鍵D.value()所有值D.items()所有“鍵+值”元組5.4.2字典操作操作結(jié)果D.copy()復(fù)制(頂層的)D.clear()清除(刪除所有項目)D.update(D2)通過鍵合并D.get(key,default)通過鍵獲取,如果不存在默認(rèn)返回NoneD.pop(key,default)通過鍵刪除,如果不存在返回錯誤D.setdefault(key,default)通過鍵獲取,如果不存在默認(rèn)設(shè)置為NoneD.popitem()刪除/返回所有的(鍵,值)對len(D)長度(儲存的鍵值對的對數(shù))D[key]=42新增/修改鍵,刪除鍵delD[key]根據(jù)鍵刪除條目list(D.keys())查看字典值D={x:x*2forxinrange(10)}字典推導(dǎo)【程序5-14】用字典保存朋友的生日,使用名字作為鍵,生日作為值。birthdays={'小明':'Apr12001','小紅':'Dec121999','小強(qiáng)':'Mar42001'}monthInChinese={'Jan':'1月','Feb':'2月','Mar':'3月','Apr':'4月','May':'5月','Jun':'6月','Jul':'7月','Aug':'8月','Sep':'9月','Oct':'10月','Nov':'11月','Dec':'12月'}print("你保存了生日的朋友有:")forxinbirthdays:print(x,end="")print()whileTrue:print('輸入你想要知道哪天生日的朋友名字:(空格退出)')name=input()ifname=='':breakifnameinbirthdays:birth=birthdays[name].split()print(name+'的生日是'+birth[2]+'年'+monthInChinese[birth[0]]+birth[1]+'日')else:print('我不知道'+name+'的信息。')5.4.3常用字典方法1.keys()、values()和items()方法keys()、values()和items()方法將返回類似列表的值,分別對應(yīng)于字典的鍵、值和鍵-值對。但這些方法返回的值不是真正的列表,它們不能被修改,沒有append()方法,這些數(shù)據(jù)類型分別是dict_keys、dict_values和dict_items,可以用于for循環(huán)。可以將這些方法返回的值傳遞給list()函數(shù)得到一個真正的列表?!境绦?-15】輸入一個星期名的縮寫,如'Su','Mo','Tu','We','Th','Fr','Sa',輸出對應(yīng)的英文星期名稱和中文星期名稱。week=input('請輸入某一個星期幾的縮寫:')days={'Su':('Sunday','星期日'),'Mo':('Monday','星期一'),'Tu':('Tuesday','星期二'),'We':('Wednesday','星期三'),'Th':('Thursday','星期四'),'Fr':('Friday','星期五'),'Sa':('Saturday','星期六')}ifweekindays.keys():print('"'+week+'"是'+days[week][0]+','+days[week][1])else:print("輸入有誤!")5.4.3常用字典方法2.get()方法get()方法有兩個參數(shù),第一個為需要獲取其值的鍵,第二個為當(dāng)該鍵不存在時返回的值,缺省為None。方法返回該鍵對應(yīng)的值或不存在該鍵時第二個參數(shù)所設(shè)置的值。spam={'color':'red','age':42}print('color:'+spam.get('color'))print('age:'+str(spam.get('age')))print('name:'+spam.get('name','你所訪問的值不存在'))print('Tel:'+str(spam.get('tel')))5.4.3常用字典方法3.setdefault()方法setfault()方法可以為字典中的某個鍵設(shè)置一個默認(rèn)值。傳遞給該方法的第一個參數(shù)是要檢查的鍵,第二個參數(shù)是當(dāng)該鍵不存在時要設(shè)置的值。如果該鍵確實存在,那么setdefault()方法就會返回該鍵的值。。spam={'color':'red','age':42}spam.setdefault('name','Pooks')print(spam)spam.setdefault('color','blue')print(spam)【程序5-16】統(tǒng)計一個字符串中每個字符出現(xiàn)的次數(shù)message="Beautifulisbetter."#創(chuàng)建一個空字典,準(zhǔn)備存放每個字符和其個數(shù)組成的鍵值對count={}forcinmessage:#在字典count中若不存在該字符,則其值設(shè)置為0count.setdefault(c,0)#每個字符的個數(shù)值加1count[c]+=1print(count)【程序5-17】輸入學(xué)生的學(xué)號、姓名以及語文、數(shù)學(xué)、外語成績,統(tǒng)計每個學(xué)生的總分,并按順序輸出所有學(xué)生的學(xué)號、姓名和總分。print("請依次輸入學(xué)號姓名語文成績數(shù)學(xué)成績英語成績,并以#號結(jié)束")student={}s=input().split()whiles[0]!='#':sum=eval(s[2])+eval(s[3])+eval(s[4])#學(xué)號為鍵,值為姓名和總分student[s[0]]=s[1],sums=input().split()print("學(xué)號姓名總分")forsinstudent:print(s+','+student[s][0]+','+str(student[s][1]))程序示例【程序5-18】輸入學(xué)生的姓名和成績等級,以‘#’結(jié)束,等級用字符A,B,C,D,E,F(xiàn)表示。輸出每個等級的人數(shù)和姓名?!境绦?-19】將文本中的符號及某些單詞去除后進(jìn)行單詞個數(shù)統(tǒng)計。列表、元組、字典列表和元組是一種序列,是任意對象的有序集合,因此可以通過索引對其元素進(jìn)行訪問。字典是一種映射,是任意對象的無序集合,因此只能通過鍵而不是通過索引對其元素進(jìn)行訪問。列表和字典都是可變對象,而元組是不可變對象。如果數(shù)據(jù)帶有標(biāo)簽的話,字典通常是更好的選擇,字典查找通常也比列表中的搜索更快。第5章結(jié)構(gòu)化類型5.5集合5.5集合5.5.1創(chuàng)建集合5.5.2集合操作5.5.3集合運(yùn)算5.5集合集合(set)是Python中的基本數(shù)據(jù)結(jié)構(gòu),可以存儲無序的元素。集合內(nèi)的元素必須是不可變對象,并且所有的元素不能有重復(fù)。不支持索引訪問集合里的元素使用集合的主要好處是速度快。5.5.1創(chuàng)建集合可以通過將元素用一對花括號{}括起來以創(chuàng)建一個元素集合。集合中的元素用逗號隔開。也可以用set()函數(shù)從一個列

溫馨提示

  • 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

提交評論