版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
任務(wù)4:批量學生成績處理Python程序設(shè)計1、任務(wù)描述目錄2、技術(shù)準備Python程序設(shè)計3、任務(wù)實施1、任務(wù)描述本任務(wù)主要完成對所有學生的成績處理,要求統(tǒng)計每門課程的最高分、最低分、平均分,學生總成績排名等功能。要完成本任務(wù)需要了解和掌握Python中常用序列的使用。2.1列表技術(shù)準備2.2元組Python程序設(shè)計2.3字典2.4集合2.5字符串2.1列表Python中提供了序列來處理批量數(shù)據(jù)。常用的序列有列表、元組、字典、集合、字符串等。按數(shù)據(jù)存放是否有先后位置可將序列分為有序序列(列表、元組和字符串)和無序序列(字典、集合)兩種。按元素值是否允許改變可將序列分為可變序列(列表、字典、集合)和不可變序列(元組、字符串)兩種。對于有序序列可通過其位置(下標)來獲取相應(yīng)的元素。Python支持雙向索引,正向索引時第一個元素下標為0,第二個元素下標為1,以此類推;反向索引時最后一個元素下標為-1,倒數(shù)第二個元素下標為-2,以此類推。2.1列表列表(list)是可變有序序列,用于存儲一組數(shù)據(jù)元素。所有元素放在一對中括號“[
]”中,各元素間使用逗號分隔。列表可以為空,即中括號里面沒有任何元素。列表中的元素可以是任意合法的數(shù)據(jù)類型,可以同時包含不同類型的數(shù)據(jù)。例如,以下都是合法的列表:[10,20,30,40,50,60,70]['hello',10,3.8,(4,5),True][{'name':'王芳','age':23},{2,3,4},[1,2,3]][[1,2,3],[4,5,6],[7,8,9]][None,[],['a','b','c']]2.1列表1.列表的創(chuàng)建與刪除(1)列表的創(chuàng)建列表的創(chuàng)建有兩種常用方式。方式1:使用“[]”創(chuàng)建此種方式也稱為直接賦值方式創(chuàng)建。>>>a_list=[10,20,30,40,50,60,70]>>>a_list[10,20,30,40,50,60,70]>>>a_list=['hello',10,3.8,(4,5),True]>>>a_list['hello',10,3.8,(4,5),True]>>>a_list=[{'name':'王芳','age':23},{2,3,4},[1,2,3]]>>>a_list[{'name':'王芳','age':23},{2,3,4},[1,2,3]]>>>a_list=[None,[],['a','b','c']]>>>a_list[None,[],['a','b','c']]>>>a_list=[]#創(chuàng)建一個空列表>>>a_list[]>>>type(a_list)#查看列表類型<class'list'>2.1列表方式2:使用list()函數(shù)創(chuàng)建利用list()函數(shù)可將一個數(shù)據(jù)結(jié)構(gòu)對象(如元組、range對象、字符串或其他類型可迭代對象等)轉(zhuǎn)換為列表。>>>a_list=list('good')#將字符串轉(zhuǎn)換為列表>>>a_list['g','o','o','d']>>>a_list=list((1,2,3))#將元組轉(zhuǎn)換為列表>>>a_list[1,2,3]>>>a_list=list(range(1,10,2))#將range對象轉(zhuǎn)換為列表>>>a_list[1,3,5,7,9]>>>a_list=list({1,2,3})#將集合轉(zhuǎn)換為列表>>>a_list[1,2,3]>>>a_list=list()#創(chuàng)建空列表>>>a_list[]2.1列表(2)列表的刪除當一個列表不再使用時,可利用del命令將其刪除,以釋放其存儲空間。>>>a_list=[1,2,3]>>>a_list[1,2,3]>>>dela_list#刪除列表>>>a_list#此時再查看列表已經(jīng)不存在了,拋出異常Traceback(mostrecentcalllast):File"<pyshell#44>",line1,in<module>a_listNameError:name'a_list'isnotdefined2.1列表2.列表元素的常用操作(1)列表元素的獲取方式1:通過下標來獲取某一元素格式:列表對象[下標]功能:獲取指定下標位置的元素。>>>a_list=[10,20,30,40]>>>a_list[0]#獲取第1個元素,下標從0開始10>>>a_list[2]30>>>a_list[-1]#獲取最后一個元素(列表支持雙向索引)40>>>a_list[6]#下標越界,拋出異常Traceback(mostrecentcalllast):File"<pyshell#20>",line1,in<module>a_list[6]IndexError:listindexoutofrange2.1列表方式2:利用切片操作來獲取多個元素格式:列表對象[start:end:step]功能:提取列表中起始下標從start開始、以step步長為間隔(步長可正可負)、到結(jié)束下標end為止(不包含end)的所有元素。若start省略,默認為從下標0開始;若end省略,默認取到最后一個元素;若步長step省略,則默認為1。>>>a_list=[0,1,2,3,4,5,6,7,8,9,10]>>>a_list[0:11:2][0,2,4,6,8,10]>>>a_list[0:4]#獲取下標為0~3的元素,步長省略,默認為1[0,1,2,3]>>>a_list[:4]#起始下標省略,默認從0開始[0,1,2,3]2.1列表>>>a_list[6:]#結(jié)束下標省略,默認取到最后[6,7,8,9,10]>>>a_list[::2]#起始下標、結(jié)束下標都省略,步長為2[0,2,4,6,8,10]>>>a_list[::]#起始下標、結(jié)束下標、步長都省略[0,1,2,3,4,5,6,7,8,9,10]>>>a_list[::-1]#起始、結(jié)束下標省略,步長指定為-1[10,9,8,7,6,5,4,3,2,1,0]>>>a_list[-1:-3]#步長沒有指定默認為1,此區(qū)間不存在返回空列表[]>>>a_list[-1:-3:-1]#取倒數(shù)第1~2之間的元素,步長為-1[10,9]>>>a_list[-3:-1]#取倒數(shù)第3~2之間的元素,步長為1[8,9]2.1列表提示:使用切片操作時,不會因為下標越界而拋出異常,而是簡單地在列表尾部截斷或返回一個空列表。>>>a_list=[0,1,2,3,4,5,6,7,8,9,10]>>>a_list[5:15]#結(jié)束下標大于列表長度時,從列表尾部截斷[5,6,7,8,9,10]>>>a_list[11:20]#起始下標大于列表長度時返回空列表[]2.1列表(2)列表元素的修改方式1:直接通過下標形式修改某一元素。>>>a_list=[0,1,2,3,4,5,6,7,8,9,10]>>>a_list[0]=100#修改下標為0的元素>>>a_list[100,1,2,3,4,5,6,7,8,9,10]2.1列表方式2:通過切片操作修改。>>>a_list=[0,1,2,3,4,5,6,7,8,9,10]>>>a_list[0:3]=[99,99,99]#使用切片修改前3個元素>>>a_list[99,99,99,3,4,5,6,7,8,9,10]>>>a_list[::5]=[100,100,100]#使用切片修改下標為0、5、10的元素>>>a_list[100,99,99,3,4,100,6,7,8,9,100]2.1列表(3)列表元素的添加Python中列表元素的添加可通過列表對象本身提供的一些方法來實現(xiàn),也可通過切片操作來實現(xiàn)。方法1:append()方法格式:列表對象.append(x)功能:在列表尾部添加元素x。x可是任意合法的數(shù)據(jù)對象。2.1列表>>>a_list=[0,1,2,3,4,5]>>>a_list.append(99)#在列表尾部添加元素99>>>a_list[0,1,2,3,4,5,99]>>>a_list.append([99])#在列表尾部添加元素[99]>>>a_list[0,1,2,3,4,5,99,[99]]>>>a_list.append(range(5))#在列表尾部添加元素range對象>>>a_list[0,1,2,3,4,5,99,[99],range(0,5)]>>>a_list.append([[1,2],[3,4]])#在列表尾部添加元素[[1,2],[3,4]]>>>a_list[0,1,2,3,4,5,99,[99],range(0,5),[[1,2],[3,4]]]2.1列表方法2:insert()方法格式:列表對象.insert(index,x)功能:在列表指定位置index處添加元素x。原來該位置及其以后的元素都自動后移一個位置。如果index超出范圍默認在列表尾部添加。>>>a_list=[0,1,2,3,4,5]>>>a_list.insert(0,99)>>>a_list[99,0,1,2,3,4,5]>>>a_list.insert(1,[99,99])>>>a_list[99,[99,99],0,1,2,3,4,5]>>>a_list.insert(100,99)#下標超出范圍時在列表尾部添加>>>a_list[99,[99,99],0,1,2,3,4,5,99]2.1列表方法3:extend()方法格式:列表對象.extend(迭代對象)功能:將另一個迭代對象的所有元素添加至列表對象尾部。該方法的參數(shù)必須是一個可迭代對象(如列表、元組、字典、集合、字符串、range對象等)。>>>a_list=[0,1,2,3,4,5]>>>a_list.extend([99,99])>>>a_list[0,1,2,3,4,5,99,99]>>>a_list.extend('good')>>>a_list[0,1,2,3,4,5,99,99,'g','o','o','d']>>>a_list.extend(range(5))>>>a_list[0,1,2,3,4,5,99,99,'g','o','o','d',0,1,2,3,4]>>>a_list.extend(99)#數(shù)字99不是可迭代對象Traceback(mostrecentcalllast):File"<pyshell#105>",line1,in<module>a_list.extend(99)TypeError:'int'objectisnotiterable2.1列表方法4:利用切片操作來添加元素。利用切片操作可在列表任意位置添加元素。要添加的元素必須是一可迭代對象。當給出的下標超出范圍時默認在列表尾部添加。>>>a_list=[0,1,2,3,4,5]>>>a_list[6:]=[6,7,8]#尾部添加>>>a_list[0,1,2,3,4,5,6,7,8]>>>a_list[100:]=[99,99]#下標超出范圍時在列表尾部添加>>>a_list[0,1,2,3,4,5,6,7,8,99,99]>>>a_list[0:0]=[99,99]#頭部添加>>>a_list[99,99,0,1,2,3,4,5,6,7,8,99,99]>>>a_list[2:2]=[100]#指定位置添加>>>a_list[99,99,100,0,1,2,3,4,5,6,7,8,99,99]>>>a_list[100:]=999#要添加的元素不是可迭代對象,拋出異常Traceback(mostrecentcalllast):File"<pyshell#119>",line1,in<module>a_list[100:]=999TypeError:canonlyassignaniterable2.1列表(4)列表元素的刪除列表元素的刪除也可有多種不同的方法來實現(xiàn)。方法1:del命令格式:del列表對象[下標]功能:刪除指定位置上的元素,其后面位置上所有的元素自動前移一個位置。如果給定的下標超出了列表的范圍則拋出異常。>>>a_list=[0,1,2,3,4,5]>>>dela_list[0]>>>a_list[1,2,3,4,5]>>>dela_list[6]#指定下標不存在拋出異常Traceback(mostrecentcalllast):File"<pyshell#125>",line1,in<module>dela_list[6]IndexError:listassignmentindexoutofrange2.1列表方法2:pop()方法格式:列表對象.pop([下標])功能:刪除并返回列表指定位置(如沒有指定則默認為最后一個)上的元素,如果給定的下標超出列表范圍則拋出異常。>>>a_list=[0,1,2,3,4,5]>>>a_list.pop()#沒有指定下標默認刪除并返回最后一個元素5>>>a_list[0,1,2,3,4]>>>a_list.pop(2)2>>>a_list[0,1,3,4]>>>a_list.pop(9)#下標越界拋出異常Traceback(mostrecentcalllast):File"<pyshell#131>",line1,in<module>a_list.pop(9)IndexError:popindexoutofrange2.1列表方法3:remove()方法格式:列表對象.remove(x)功能:刪除列表中首次出現(xiàn)的指定元素x,如果列表中不存在要刪除的元素x,則拋出異常。>>>a_list=[1,3,5,7,9,7]>>>a_list.remove(7)#刪除指定元素7>>>a_list[1,3,5,9,7]#只能刪除第一次出現(xiàn)的元素7>>>a_list.remove(99)#若刪除的元素不存在,拋出異常Traceback(mostrecentcalllast):File"<pyshell#92>",line1,in<module>a_list.remove(99)ValueError:list.remove(x):xnotinlist2.1列表方法4:clear()方法格式:列表對象.clear()功能:刪除列表中所有元素。也即清空列表。>>>a_list=[0,1,2,3,4,5,6,7,8,9,10]>>>a_list.clear()#清空列表>>>a_list[]2.1列表方法5:利用切片操作刪除元素>>>a_list=[0,1,2,3,4,5,6,7,8,9,10]>>>a_list[3:8]=[]#刪除下標為3~7的元素>>>a_list[0,1,2,8,9,10]2.1列表3.列表常用方法除了前面介紹的列表元素的添加、刪除方法之外,Python中還提供了其他大量列表方法來對列表操作。(1)index()方法格式:列表對象.index(x)功能:返回列表中指定元素x首次出現(xiàn)的下標,若不存在指定元素x,則拋出異常。>>>a_list=[1,3,5,7,9,7]>>>a_list.index(7)#返回指定元素7首次出現(xiàn)的下標3>>>a_list.index(99)#指定元素99不存在,拋出異常Traceback(mostrecentcalllast):File"<pyshell#109>",line1,in<module>a_list.index(99)ValueError:99isnotinlist2.1列表(2)count()方法格式:列表對象.count(x)功能:統(tǒng)計指定元素x在列表中出現(xiàn)的次數(shù)。>>>a_list=[1,3,5,7,9,7]>>>a_list.count(7)#統(tǒng)計元素7出現(xiàn)的次數(shù)2>>>a_list.count(99)#若元素不存在返回002.1列表(3)sort()方法格式:列表對象.sort([reverse=True])功能:對列表進行原地排序(也即排序后會改變原列表中元素次序),默認為升序,加上可選參數(shù)reverse=True則為降序排列。>>>a_list=[3,2,1,5,4]>>>a_list.sort()#升序排列>>>a_list[1,2,3,4,5]>>>a_list.sort(reverse=True)#降序排列>>>a_list[5,4,3,2,1]2.1列表(4)reverse()方法格式:列表對象.reverse()功能:將列表元素原地逆序或翻轉(zhuǎn)。也即將第一個元素和最后一個元素互換,第二個元素和倒數(shù)第二個元素互換,以此類推。>>>a_list=[3,2,1,5,4]>>>a_list.reverse()>>>a_list[4,5,1,2,3]利用切片操作也可實現(xiàn)將一個列表逆序,但切片操作不會修改原列表,是將逆序后的結(jié)果作為一個新列表返回。>>>a_list=[3,2,1,5,4]>>>a_list[::-1][4,5,1,2,3]>>>a_list[3,2,1,5,4]2.1列表4.列表常用函數(shù)除了列表對象自身方法之外,Python還提供了一些內(nèi)置函數(shù)用于列表操作。(1)求最大值函數(shù)max()格式:max(列表對象)功能:返回列表中所有元素的最大值。說明:使用此函數(shù)時應(yīng)保證列表中所有元素之間能互相比較大小,否則會拋出異常。>>>a_list=[3,2,1,5,4]>>>max(a_list)5>>>a_list=['boy','hello','good']>>>max(a_list)'hello'>>>a_list=[3,4,2,True,False]>>>max(a_list)4>>>a_list=[3,2,1,5,4,"dd"]>>>max(a_list)#類型不相同,無法比較,拋出異常Traceback(mostrecentcalllast):File"<pyshell#131>",line1,in<module>max(a_list)TypeError:'>'notsupportedbetweeninstancesof'str'and'int'2.1列表(2)求最小值函數(shù)min()格式:min(列表對象)功能:返回列表中所有元素的最小值。說明:使用此函數(shù)時應(yīng)保證列表中所有元素之間能互相比較大小,否則會拋出異常。>>>a_list=[3,2,1,5,4]>>>min(a_list)1>>>a_list=['boy','hello','good']>>>min(a_list)'boy'>>>a_list=[3,4,2,True,False]>>>min(a_list)False2.1列表(3)求和函數(shù)sum()格式:sum(列表對象)功能:求列表中所有元素之和。當列表中元素為數(shù)值型數(shù)據(jù)才可使用此函數(shù),否則拋出異常。>>>a_list=[3,2,1,5,4]>>>sum(a_list)15>>>a_list=[3,4,2,True,False]>>>sum(a_list)10>>>a_list=['a','b','c']>>>sum(a_list)#字符串類型數(shù)據(jù)無法求和Traceback(mostrecentcalllast):File"<pyshell#16>",line1,in<module>sum(a_list)TypeError:unsupportedoperandtype(s)for+:'int'and'str'
2.1列表(4)求長度函數(shù)len()格式:len(列表對象)功能:返回列表中元素個數(shù)。>>>a_list=[1,2,4,[4,5]]>>>len(a_list)4>>>a_list=[[1,2,3,(4,5)]]>>>len(a_list)12.1列表(5)排序函數(shù)sorted()格式:sorted(列表對象,[reverse=True])功能:對列表進行排序,默認為升序,加可選參數(shù)reverse=True則是為降序。排序結(jié)果作為新列表返回。>>>a_list=[3,2,1,5,4]>>>sorted(a_list)#升序排列[1,2,3,4,5]>>>sorted(a_list,reverse=True)#降序排列[5,4,3,2,1]2.1列表注意:雖然使用內(nèi)置函數(shù)sorted()和列表方法sort()都能對列表進行排序,但兩者有些區(qū)別:用內(nèi)置函數(shù)sorted()排序時并不修改原列表中元素的次序,它將排序結(jié)果放在一新列表中返回,而列表的sort()方法是原地排序,也即改變了原列表中元素的次序。>>>a_list=[3,2,1,5,4]>>>sorted(a_list)#使用內(nèi)置函數(shù)sorted()排序[1,2,3,4,5]>>>a_list#不會改變原列表中元素次序[3,2,1,5,4]>>>a_list.sort()#使用列表方法sort()排序>>>a_list#改變了原列表中元素次序[1,2,3,4,5]2.1列表(6)逆序函數(shù)reversed()格式:reversed(列表對象)功能:將列表中元素逆序或翻轉(zhuǎn)。返回結(jié)果為一可迭代對象。說明:此函數(shù)不會修改原列表中元素位置,將列表逆序后的結(jié)果放在一可迭代對象中。而列表的reverse()方法是會改變原列表中元素位置的。>>>a_list=[3,2,1,5,4]>>>reversed(a_list)#返回的是一可迭代對象<list_reverseiteratorobjectat0x000000AE6FDCCE48>>>>a_list#使用reversed()函數(shù)不會改變原列表[3,2,1,5,4]>>>a_list.reverse()>>>a_list#使用reverse()方法會改變原列表[4,5,1,2,3]2.1列表要想查看可迭代對象中的內(nèi)容,可利用for循環(huán)來遍歷其中的內(nèi)容,也可將其轉(zhuǎn)換為列表。需要注意的是,可迭代對象中的內(nèi)容只能使用一次,用過后就沒有了,如果要想再次使用需要重新生成。>>>a_list=[3,2,1,5,4]>>>result=reversed(a_list)>>>foriinresult: print(i,end='')
45123>>>list(result)#可迭代對象中的內(nèi)容用過一次就沒有了[]>>>result=reversed(a_list)>>>list(result)[4,5,1,2,3]2.1列表5.列表可用運算符(1)連接運算符:+功能:用于將兩個列表連接成一個新列表。>>>[1,2,3]+[4,5,6][1,2,3,4,5,6](2)重復(fù)運算符:*格式:列表*重復(fù)次數(shù)功能:將列表元素重復(fù)指定次數(shù),返回一新列表。>>>[1,2,3]*3[1,2,3,1,2,3,1,2,3]2.1列表(3)成員運算符:in、notin功能:用于測試一個數(shù)據(jù)是否是列表中的元素。>>>3in[2,3,4]True>>>3in[2,[3],4]False>>>[3]in[2,3,4]False>>>'3'notin[2,3,4]True2.1列表(4)身份運算符:is、isnot功能:用于判斷兩個列表對象是否指向同一個引用。>>>a_list=[1,2,3]>>>b_list=a_list>>>a_listisb_listTrue>>>a_list=[1,2,3]>>>b_list=[1,2,3]>>>a_listisb_listFalse2.1列表6.列表推導(dǎo)式列表推導(dǎo)式(listcomprehension),也叫列表生成式,使用一種非常簡潔的方式來快速生成滿足特定需求的列表,使得代碼具有非常強的可讀性。列表推導(dǎo)式語法形式為:[expressionforexpr1insequence1ifcondition1forexpr2insequence2ifcondition2forexpr3insequence3ifcondition3...forexprNinsequenceNifconditionN]其最基本的形式是:[expressionforexpr1insequence1]2.1列表列表推導(dǎo)式邏輯上等價于一個循環(huán)語句,只是形式上更加簡潔。>>>a_list=[x*xforxinrange(1,6)]#生成一個1到5的平方的列表>>>a_list[1,4,9,16,25]上述語句就等價于:>>>a_list=[]>>>forxinrange(1,6): a_list.append(x*x)>>>a_list[1,4,9,16,25]2.1列表列表推導(dǎo)式中可以使用if子句對列表中元素進行篩選,只保留符合條件的元素。>>>a_list=[1,3,5,43,89,80,78,90,42,23]>>>[xforxina_listifx>=60]#找出所有大于等于60的數(shù)[89,80,78,90]>>>[xforxina_listifx%2==0]#找出所有的偶數(shù)[80,78,90,42]2.1列表當列表推導(dǎo)式中含有多個for循環(huán)時,相當于循環(huán)的嵌套,第一個為外循環(huán),第二個為內(nèi)循環(huán),依次類推。例如下面代碼實現(xiàn)將一個嵌套列表平鋪,類似于其他語言中的將一個矩陣(或二維數(shù)組)轉(zhuǎn)換成向量(或一維數(shù)組)。>>>vec=[[1,2,3],[4,5,6],[7,8,9]]>>>[vforlineinvecforvinline][1,2,3,4,5,6,7,8,9]上述列表推導(dǎo)式實際就相當于一個雙重循環(huán),等價于以下代碼:>>>vec=[[1,2,3],[4,5,6],[7,8,9]]>>>result=[]>>>forlineinvec: forvinline: result.append(v)>>>result[1,2,3,4,5,6,7,8,9]2.1列表7.列表應(yīng)用示例【例4?1】設(shè)在一個列表中存放有一組學生成績,利用列表的相關(guān)操作完成以下功能:(1)求所有學生成績的最高值。(2)求所有學生成績的最低值。(3)求所有學生成績的平均分。(4)統(tǒng)計不及格的學生人數(shù)。(5)統(tǒng)計90分以上的學生人數(shù)。(6)找出60-80之間的所有成績。(7)找出所有相同分數(shù)的成績。(8)將成績從高到低排序。(9)查找第二名的考試分數(shù)。(10)查找某一成績在班內(nèi)排第幾名。2.1列表>>>score=[40,55,78,89,90,89,99,67,90,92]>>>max(score)#最高分99>>>min(score)#最低分40>>>sum(score)/len(score)#平均分78.9>>>len([sforsinscoreifs<60])#不及格人數(shù)2>>>len([sforsinscoreifs>=90])#90分以上學生人數(shù)4>>>[sforsinscoreif60<=s<=80]#成績在60-80之間的[78,67]2.1列表>>>[sforsinscoreifscore.count(s)>=2]#具有相同分數(shù)的成績[89,90,89,90]>>>score.sort(reverse=True)#逆序排序>>>score[99,92,90,90,89,89,78,67,55,40]>>>score[1]#第二名成績92>>>score.index(78)+1#查看某一成績排名72.1列表【例4?2】阿凡提與國王比賽下棋,國王說要是自己輸了,阿凡提想要什么他都可以拿得出來。阿凡提說那就要點米吧,棋盤一共64個小格子,在第一個格子里放1粒米,第二個格子里放2粒米,第三個格子里放4粒米,第四個格子里放8粒米,以此類推,后面每個格子里的米都是前一個格子里的2倍,一直把64個格子都放滿。問共需要多少粒米呢?【分析】顯然一共需要20+21+22+…+263粒米,實際上就是一個等比數(shù)列求和。利用列表推導(dǎo)式與求和函數(shù)就可以解決。>>>sum([2**iforiinrange(64)])184467440737095516152.2元組元組(tuple)是類似于列表的一種數(shù)據(jù)結(jié)構(gòu)。元組中的元素都放在一對小括號“()”中,元素之間用逗號分隔,并且元素可以是任意類型;元組也是有序序列,可通過下標訪問元素。與列表不同的是,元組是不可變序列,一旦創(chuàng)建,就不能改變元組的元素,即不能對元組的元素進行添加、修改、刪除等操作。從一定程度上講,可以認為元組是輕量級的列表,或者是“常量列表”。Python內(nèi)部實現(xiàn)對元組做了大量優(yōu)化,訪問和處理速度比列表更快。如果一組數(shù)據(jù)主要用途是遍歷或其他類似用途,不需要對元素進行修改,建議使用元組而不用列表。同時因元組的不可變性使得元組中的元素在使用過程中相對安全,當程序中有些數(shù)據(jù)不希望在使用中被修改時,也可以考慮使用元組。2.2元組1.元組的創(chuàng)建與刪除(1)元組的創(chuàng)建元組的創(chuàng)建與列表類似,常用的創(chuàng)建方法有兩種,一是使用圓括號“()”創(chuàng)建,二是使用tuple()函數(shù)創(chuàng)建。方法1:使用“()”創(chuàng)建將元組的元素放在圓括號中,用逗號分開。當只有一個元素時,元素后面也必須有逗號;當括號內(nèi)沒有元素時,表示創(chuàng)建一個空元組。>>>t=(1,2,3)#創(chuàng)建一個非空元組>>>t(1,2,3)>>>t=([2,3],(1,2))>>>t([2,3],(1,2))>>>t=(1,)#創(chuàng)建一個只包含有一個元素的元組>>>t(1,)>>>t=([1,2,3],)>>>t([1,2,3],)>>>t=()#創(chuàng)建一個空元組>>>t()2.2元組說明:實際上在使用非空元組時,括號也可以省略。在Python中一組用逗號分隔的數(shù)據(jù)系統(tǒng)自動默認為元組類型。>>>t=1,2,3#用逗號分隔的多個數(shù)據(jù)>>>t(1,2,3)>>>t=[1,2,3],[1,2]>>>t([1,2,3],[1,2])>>>t=1,#用逗號分隔的一個數(shù)據(jù)>>>t(1,)>>>type(t)#用逗號分隔的一個數(shù)據(jù)也是元組<class'tuple'>>>>t=1#如不加逗號,則不是元組>>>type(t)<class'int'>>>>t=[1,2,3],#等價于t=([1,2,3],)>>>t([1,2,3],)>>>t=[1,2,3]#沒加逗號,不是元組>>>t[1,2,3]2.2元組方法2:使用tuple()函數(shù)創(chuàng)建利用tuple()函數(shù)可將一個數(shù)據(jù)結(jié)構(gòu)對象(如列表、range對象、字符串或其他類型可迭代對象等)轉(zhuǎn)換為元組。>>>t=tuple([1,2,3,4])#將列表轉(zhuǎn)換為元組>>>t(1,2,3,4)>>>t=tuple(range(5))#將range對象轉(zhuǎn)換為元組>>>t(0,1,2,3,4)>>>t=tuple("hello")#將字符串轉(zhuǎn)換為元組>>>t('h','e','l','l','o')2.2元組(2)元組的刪除使用del命令可刪除一個元組。>>>t=(2,3,4)#創(chuàng)建一個元組>>>t(2,3,4)>>>delt#刪除元組>>>t#此時元組已經(jīng)不存在Traceback(mostrecentcalllast):File"<pyshell#229>",line1,in<module>tNameError:name't'isnotdefined2.2元組2.元組的基本操作(1)元組元素的訪問要訪問元組元素既可以通過下標來進行,也可通過切片操作來進行,使用方法與列表類似。>>>t=(0,1,2,3,4)>>>t[2]#獲取下標為2的元素2>>>t[0:3]#獲取下標從0到2的元素(0,1,2)>>>t[::2]#獲取下標為偶數(shù)的元素(0,2,4)>>>t[::]#獲取整個元組(0,1,2,3,4)>>>t[::-1]#倒序獲取整個元組(4,3,2,1,0)>>>t[9]#下標越界Traceback(mostrecentcalllast):File"<pyshell#84>",line1,in<module>t[9]IndexError:tupleindexoutofrange>>>t[9:]#切片操作下標越界時不會拋出異常,返回空元組()2.2元組(2)元組的其他操作與列表相比,由于元組的元素是不能被修改的,所以元組的操作函數(shù)和方法相對較少。常用方法主要有index()和count(),使用方法與列表類似。常用內(nèi)置函數(shù)如max()、min()、sum()、len()、sorted()、reversed()對于元組同樣適用。元組同樣支持運算符+和*以及身份運算符和成員運算符。>>>(1,2,3)+(4,5,6)#元組的連接(1,2,3,4,5,6)>>>t=(1,2,3)*3#元組的重復(fù)>>>t(1,2,3,1,2,3,1,2,3)2.2元組>>>t.index(1)#查找元素1首次出現(xiàn)的位置0>>>t.count(1)#統(tǒng)計元素1出現(xiàn)的次數(shù)3>>>max(t)#求最大值3>>>min(t)#求最小值1>>>len(t)#統(tǒng)計元素個數(shù)9>>>sum(t)#求和18>>>3int#成員運算True>>>t2=(1,2,3)>>>tist2#身份運算False>>>sorted(t)#排序[1,1,1,2,2,2,3,3,3]>>>reversed(t)#翻轉(zhuǎn)<reversedobjectat0x0000005E128E6358>2.2元組注意:元組雖然是不可變序列,其元素不允許改變,但如果元組中包含有可變序列的話,可變序列本身仍然是可變的。>>>t=(1,2,3,[4,5])#包含列表的元組>>>t[3].append(6)#為元組中的列表添加一個元素>>>t(1,2,3,[4,5,6])>>>t[3][0]=100#修改元組中列表的元素>>>t(1,2,3,[100,5,6])2.2元組3.生成器表達式生成器表達式(generatorexpression),使用非常簡潔的方式來快速生成滿足特定需求的一組數(shù)據(jù)。其語法格式:(expressionforexpr1insequence1ifcondition1forexpr2insequence2ifcondition2forexpr3insequence3ifcondition3...forexprNinsequenceNifconditionN)從形式上看,生成器表達式與列表推導(dǎo)式非常接近,只是生成器表達式使用圓括號而列表推導(dǎo)式使用方括號。與列表推導(dǎo)式不同的是,生成器表達式的結(jié)果是一個生成器對象,而不是元組。2.2元組使用生成器對象的元素時,可以根據(jù)需要將其轉(zhuǎn)化為列表或元組,也可以使用生成器對象的__next__()方法或者內(nèi)置函數(shù)next()進行遍歷,或者直接將其作為迭代器對象來使用。不管用哪種方法訪問其元素,當所有元素訪問結(jié)束以后,如果需要重新訪問其中的元素,必須重新創(chuàng)建該生成器對象。2.2元組方法1:利用__next__()方法或者內(nèi)置函數(shù)next()遍歷生成器對象。>>>g=(i*iforiinrange(5))#創(chuàng)建一個生成器,里面共有5個元素>>>g<generatorobject<genexpr>at0x000000AE6FDDE6D0>>>>next(g)#使用內(nèi)置函數(shù)next()來訪問元素0>>>next(g)1>>>g.__next__()#使用生成器對象的__next__()方法獲取元素4>>>g.__next__()9>>>g.__next__()16>>>g.__next__()#已經(jīng)沒有元素了Traceback(mostrecentcalllast):File"<pyshell#282>",line1,in<module>g.__next__()StopIteration2.2元組方法2:將生成器轉(zhuǎn)換為列表。>>>g=(i*iforiinrange(5))>>>list(g)#將生成器轉(zhuǎn)換為列表[0,1,4,9,16]方法3:直接利用循環(huán)遍歷生成器中的對象。>>>g=(i*iforiinrange(5))>>>foriing: print(i,end='')0149162.2元組4.元組應(yīng)用示例【例4?3】求從3種顏色中隨機選擇2種的所有組合。colors=('red','green','blue')combine=[(colors[i],colors[j])foriinrange(len(colors))forjinrange(i+1,len(colors))]print('3種顏色中隨機選擇2種的組合有:')forcincombine:print(c,end='')【運行結(jié)果】3種顏色中隨機選擇2種的組合有:('red','green')('red','blue')('green','blue')2.2元組【例4?4】求從1到3中任選2個數(shù)組成的所有兩位數(shù)。num=tuple(range(1,4))combine=((x,y)forxinnumforyinnumifx!=y)print('從1到3中任選2個數(shù)組成的所有2位數(shù)是:')forcincombine:print(c[0]*10+c[1],end='')【運行結(jié)果】從1到3中任選2個數(shù)組成的所有2位數(shù)是:1213212331322.3字典字典(dictionary)是包含若干鍵值對(key:value)的無序可變序列,是一個映射類型的數(shù)據(jù)結(jié)構(gòu),字典中的元素都放在一對大括號“{}”中,元素之間用逗號分隔。字典中的每個元素是一個鍵值對(key:value)。在這里,“key”被稱為“鍵”,“value”被稱為“值”,表示一種映射或?qū)?yīng)關(guān)系。例如,每個學號對應(yīng)一個學生姓名,每個書號對應(yīng)的一本書的名字,每個教工號對應(yīng)一個教師名等信息。以上三類數(shù)據(jù)用字典表示如下:{'1001':'趙宇','1002':'劉芳'}{'ISBN978-7-115-47449-0':'大學英語','ISBN978-7-302-45646-9':'Python程序設(shè)計'}{'T1001':'張軍','T1002':'王明'}字典中的元素是無序的,不能像列表、元組那樣通過索引訪問元素,而是通過“鍵”訪問對應(yīng)的元素。因此,字典中各元素的“鍵”是唯一的,不允許有重復(fù),而“值”是可以有重復(fù)的,例如學生姓名允許重名,但學號是唯一的。字典中的“鍵”可以是Python中的任意不可變類型,例如整數(shù)、實數(shù)、字符串、元組等,不能使用列表、字典、集合等可變類型,但“值”可以是任意類型。2.3字典1、字典的創(chuàng)建與刪除(1)字典的創(chuàng)建方法1:使用“{}”創(chuàng)建將鍵值對以逗號分隔放在大括號“{}”中直接賦值給某一變量。若括號中沒有給出鍵值對,表示創(chuàng)建空字典。>>>stu={'1001':'趙宇','1002':'劉芳'}>>>stu{'1001':'趙宇','1002':'劉芳'}>>>type(stu)<class'dict'>>>>stu={}>>>stu{}2.3字典方法2:使用dict()函數(shù)創(chuàng)建在使用dict()函數(shù)創(chuàng)建時,參數(shù)可以有幾種不同的表示方法。一是dict()的參數(shù)是一個可迭代的容器,即序列、迭代器或一個可迭代的對象,每個可迭代的元素必須是鍵值對。例如對字典{'1001':'趙宇','1002':'劉芳'}可以用以下4種不同方式來創(chuàng)建:>>>stu=dict((('1001','趙宇'),('1002','劉芳')))>>>stu=dict([('1001','趙宇'),('1002','劉芳')])>>>stu=dict((['1001','趙宇'],['1002','劉芳']))>>>stu=dict([['1001','趙宇'],['1002','劉芳']])2.3字典二是dict()函數(shù)的參數(shù)也可以是形如“鍵=值”的序列對>>>teacher=dict(T1001='張軍',T1002='王明')>>>teacher{'T1001':'張軍','T1002':'王明'}注意:采用此種方式時,實際上使用的是關(guān)鍵字參數(shù),等號前面的表示的是關(guān)鍵字參數(shù)名,相當于是一個變量名,要符合標識符命名規(guī)則。因此并不是所有字典都可以利用此種方式來實現(xiàn)。如果鍵是以數(shù)字開頭的,不符合標識符命名規(guī)則,在使用時就會提示有語法錯誤。如對字典{'1001':'趙宇','1002':'劉芳'}就無法以此種方式創(chuàng)建。>>>stu=dict(1001='趙宇',1002='劉芳')SyntaxError:keywordcan'tbeanexpression2.3字典方法3:利用dict的fromkeys()方法創(chuàng)建格式:dict.fromkeys(鍵[,值])或{}.fromkeys(鍵[,值])功能:根據(jù)給定鍵創(chuàng)建一個具有相同值的字典,如值沒有給出,則默認為None。>>>stu=dict.fromkeys(['1001','1002'],'趙宇')>>>stu{'1001':'趙宇','1002':'趙宇'}>>>stu={}.fromkeys(['1001','1002'])>>>stu{'1001':None,'1002':None}2.3字典(2)字典的刪除當字典不再需要時,同樣可以用del命令刪除,與刪除列表或元組類似。>>>delstu>>>stuTraceback(mostrecentcalllast):File"<pyshell#5>",line1,in<module>stuNameError:name'stu'isnotdefined2.3字典2、字典元素的訪問字典中元素是鍵值對,最簡單的訪問方式是以“鍵”作為下標來獲取指定的“值”。格式:字典對象[鍵]功能:獲取字典中指定鍵對應(yīng)的值。若指定鍵不存在則拋出異常。>>>stu={'1001':'趙宇','1002':'劉芳'}>>>stu['1001']'趙宇'>>>stu['1004']Traceback(mostrecentcalllast):File"<pyshell#37>",line1,in<module>stu['1004']KeyError:'1004'2.3字典為避免下標訪問鍵不存在時拋出異常導(dǎo)致程序中止,字典對象提供了一個get()方法用來返回指定鍵的值,該方法允許指定當鍵不存在時返回的值。格式:字典.get(<鍵>[,d])功能:若<鍵>在字典中,返回<鍵>所對應(yīng)的值,若鍵不存在且指定了d則返回d,否則無返回。>>>stu={'1001':'趙宇','1002':'劉芳'}>>>stu.get('1001','none')#當鍵存在返回相應(yīng)的值'趙宇'>>>stu.get('1004','none')#當鍵不存在返回指定的值'none'>>>stu.get('1004')#鍵不存在,未指定返回值,則無返回2.3字典(2)字典元素的添加與修改向字典中添加或修改一個元素最簡單的方法是以指定鍵為下標給字典元素賦值。如果給出的鍵在字典中不存在,則是往字典中添加元素,否則就是修改元素。>>>stu={'1001':'趙宇','1002':'劉芳'}>>>stu['1003']='孫葉'#添加元素>>>stu{'1001':'趙宇','1002':'劉芳','1003':'孫葉'}>>>stu['1002']='張芳'#修改元素>>>stu{'1001':'趙宇','1002':'張芳','1003':'孫葉'}2.3字典(3)字典元素的刪除字典元素的刪除既可以用del刪除指定的元素,也可以利用字典本身的clear()方法刪除所有元素,即清空字典。>>>stu={'1001':'趙宇','1002':'張芳','1003':'孫葉'}>>>delstu['1003']#刪除指定元素>>>stu{'1001':'趙宇','1002':'張芳'}>>>stu.clear()#清空字典>>>stu{}2.3字典3、字典常用方法方法名說明keys()獲取字典中所有的鍵,并以列表形式返回values()獲取字典中所有的值,并以列表形式返回items()以列表形式返回字典中所有的鍵值對,每個列表元素是一個元組update(<字典>)把指定<字典>中的鍵值對添加到當前字典中,若有同名鍵,其值取參數(shù)中值pop(<鍵>[,d])若<鍵>在字典中,刪除并返回<鍵>所對應(yīng)的值,若不在有d則返回d,無d時引發(fā)異常popitem()刪除并返回一個鍵值對的元組,字典為空時將引發(fā)異常setdefault(<鍵>[,d])對在字典中的鍵,返回對應(yīng)的值,參數(shù)d無效;不在時設(shè)置相應(yīng)的鍵和值,并返回設(shè)置值(d默認為None)2.3字典(1)keys()、values()和items()方法這三個方法分別用來返回字典的鍵、值和元素。>>>stu={'1001':'趙宇','1002':'張芳','1003':'孫葉'}>>>stu.keys()dict_keys(['1001','1002','1003'])>>>stu.values()dict_values(['趙宇','張芳','孫葉'])>>>stu.items()dict_items([('1001','趙宇'),('1002','張芳'),('1003','孫葉')])2.3字典當對字典進行迭代時,默認遍歷的是字典的鍵。若想作用于值,需要用values()方法明確指定;若想作用于元素,即鍵值對,則需要用items()方法明確指定。成員運算符in和notin也適用于字典,默認也是作用于字典的鍵。>>>stu={'1001':'趙宇','1002':'張芳','1003':'孫葉'}>>>forkinstu:#默認遍歷的是字典的鍵 print(k,end='') 100110021003>>>forvinstu.values():#遍歷字典的值 print(v,end='')趙宇張芳孫葉>>>foriinstu.items():#遍歷字典的元素,即健值對 print(i,end='')('1001','趙宇')('1002','張芳')('1003','孫葉')>>>'1001'instu#檢查鍵是否在字典中True>>>'趙宇'instuFalse>>>'趙宇'instu.values()True2.3字典(2)update()方法格式:字典1.update(<字典2>)功能:用字典2去更新字典1,若字典2中的鍵在字典1中不存在,則添加相應(yīng)的鍵值對;若存在,則用字典2的值更新字典1中相對應(yīng)的值。>>>stu1={'1001':'趙宇','1002':'張軍'}>>>stu2={'1001':'趙宇','1002':'張芳','1003':'孫葉'}>>>stu1.update(stu2)>>>stu1{'1001':'趙宇','1002':'張芳','1003':'孫葉'}2.3字典(3)pop()和popitem()方法pop(<鍵>[,d]):若<鍵>在字典中,刪除并返回<鍵>所對應(yīng)的值,若不在有d則返回d,無d時引發(fā)異常。popitem():刪除并返回一個鍵值對的元組,字典為空時將引發(fā)異常。>>>stu={'1001':'趙宇','1002':'張軍'}>>>stu.pop('1001','noexists')'趙宇'>>>stu.pop('1006','noexists')'noexists'>>>stu.popitem()('1002','張軍')2.3字典(4)setdefault()方法格式:setdefault(<鍵>[,d])功能:當指定鍵在字典中不存在時,該方法相當于添加一個新元素,當指定鍵在字典中存在時,該方法獲取指定鍵的值,相當于get()方法。>>>stu={'1001':'趙宇','1002':'張軍'}>>>stu.setdefault('1003','劉敏')#指定鍵不存在,相當于添加元素'劉敏'>>>stu{'1001':'趙宇','1002':'張軍','1003':'劉敏'}>>>stu.setdefault('1002','劉敏')#指定鍵存在,相當于get()方法'張軍'>>>stu{'1001':'趙宇','1002':'張軍','1003':'劉敏'}2.3字典4.字典常用函數(shù)內(nèi)置函數(shù)len()、max()、min()、sum()和sorted()同樣適用于字典,須注意的是使用這些函數(shù)時默認也是作用于字典的鍵。若想作用于值,需要用values()方法明確指定;若想作用于元素,即鍵值對,則需要用items()方法明確指定。>>>mydict={1:10,2:200,3:30}>>>max(mydict)#對鍵求最大值3>>>max(mydict.values())#對值求最大值200>>>sum(mydict)#對鍵求和6>>>sum(mydict.values())#對值求和240>>>len(mydict)3>>>sorted(mydict,reverse=True)#默認對鍵排序[3,2,1]>>>sorted(mydict.values())#對值排序[10,30,200]>>>sorted(mydict.items())#對元素排序[(1,10),(2,200),(3,30)]2.3字典提示:在排序時可通過key參數(shù)指定不同的排序依據(jù),排序依據(jù)的指定常用的有兩種方式,一是利用標準庫operator中的itemgetter,二是利用匿名函數(shù)。(1)利用itemgetter指定排序依據(jù):>>>fromoperatorimportitemgetter>>>sorted(mydict.items(),key=itemgetter(1))#按值大小對元素進行排序[(1,10),(3,30),(2,200)](2)利用匿名函數(shù)指定排序依據(jù):>>>sorted(mydict.items(),key=lambdax:x[1])#按值大小對元素進行排序[(1,10),(3,30),(2,200)]2.3字典5.字典推導(dǎo)式字典也支持采用一種簡潔的形式來生成,也即字典推導(dǎo)式,與列表推導(dǎo)式使用方法相似,只不過外面是用大括號“{}”而不是用中括號“[]”包裹,且每個元素是鍵值對形式。>>>{str(i):iforiinrange(1,5)}{'1':1,
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年江西省水利投資集團有限公司中層管理人員招聘備考題庫含答案詳解
- 2025年高職會計(財務(wù)分析)試題及答案
- 2025年中職第三學年(房地產(chǎn)市場調(diào)研)市場分析階段測試題及答案
- 2025年中職(環(huán)境監(jiān)測技術(shù))環(huán)境檢測階段測試題及答案
- 2025年大學二年級(稅收學)稅務(wù)籌劃綜合測試題及答案
- 2025年大學服裝效果圖(電腦繪圖技巧)試題及答案
- 2025年中職烹飪工藝與營養(yǎng)(蒸菜制作工藝)試題及答案
- 2025年中職城市水利(城市水利工程)試題及答案
- 2025年高職數(shù)字媒體藝術(shù)設(shè)計(展示設(shè)計)試題及答案
- 2026年電腦維修(病毒查殺方法)試題及答案
- 上海市松江區(qū)2026屆初三一模英語試題(含答案)
- 2026年孝昌縣供水有限公司公開招聘正式員工備考題庫及參考答案詳解一套
- 臨床技能培訓(xùn)中的教學理念更新
- 光伏系統(tǒng)并網(wǎng)調(diào)試施工方案
- 2025年太原理工大學馬克思主義基本原理概論期末考試參考題庫
- 2026屆廣東東莞七校高三上學期12月聯(lián)考政治試題含答案
- 感染科結(jié)核病防治培訓(xùn)指南
- DL∕T 5776-2018 水平定向鉆敷設(shè)電力管線技術(shù)規(guī)定
- 國防裝備全壽命周期管理
- 2023年高考英語應(yīng)用文模板、范文大全
- GB/Z 43280-2023醫(yī)學實驗室測量不確定度評定指南
評論
0/150
提交評論