




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第6章組合數(shù)據(jù)類型6.1列表
6.2元組
6.3字典
6.4集合
12列表是一種可變的有序序列,由一對英文方括號括起來的多個數(shù)據(jù)元素組成,元素之間用英文逗號進行分隔。列表元素的數(shù)據(jù)類型可以相同,也可以不相同,可以是數(shù)字、字符串、列表、元組、字典等數(shù)據(jù)類型。列表中的元素可以重復(fù),也可以在列表創(chuàng)建完成后,對其元素進行增加、修改、刪除等操作。6.1列表6.1列表6.1.1列表的創(chuàng)建
6.1.2
列表的訪問
6.1.3列表的切片
6.1.4
列表元素的增加
6.1.5
列表元素的刪除
6.1.6列表元素的修改6.1.7列表元素的索引和統(tǒng)計6.1.8列表元素的排序和反序6.1.9列表的其他操作341.賦值法使用“=”運算符將一個可迭代序列賦值給列表名,即完成了列表的創(chuàng)建?;菊Z法格式如下所示:6.1.1列表的創(chuàng)建列表名=[可迭代序列]Python中將一個可迭代序列直接賦值給列表名,列表名可以是任何符合Python語法命名規(guī)則的標(biāo)識符。示例代碼如下所示:>>>list1=[]#創(chuàng)建名為list1的空列表>>>list2=['I','LOVE','CHINA']#創(chuàng)建含有3個字符串元素的列表>>>list3=[1,'1',[1],{1}]#創(chuàng)建含有4個不同數(shù)據(jù)類型元素的列表52.函數(shù)法使用內(nèi)置函數(shù)list()進行列表的創(chuàng)建。基本語法格式如下所示:6.1.1列表的創(chuàng)建列表名=list(可迭代對象)list()函數(shù)用于將一個可迭代對象(如元組、字符串或其他可迭代的數(shù)據(jù)結(jié)構(gòu))轉(zhuǎn)換為列表,列表名可以是任何符合Python語法命名規(guī)則的標(biāo)識符。示例代碼如下所示:>>>list4=list() #創(chuàng)建名為list4的空列表
>>>list5=list('CHINA') #等價于list5=['C','H','I','N','A']>>>list6=list(range(0,10,3)) #等價于list6=[0,3,6,9]6與字符串元素的訪問方法類似,列表也使用索引來訪問其中的元素。索引分為正向索引和反向索引。正向索引是把序列中的元素從左向右編號,即第一個元素的索引號為0,第二個元素的索引號為1等,以此類推。反向索引是把序列中的元素從右向左編號,即最后一個元素的索引號為-1,倒數(shù)第二個元素的索引號為-2等,以此類推。列表的正向索引和反向索引如下圖所示:6.1.2列表的訪問7在列表的訪問過程中,可以使用列表名直接輸出全部列表元素,也可以使用列表名和索引號輸出指定的元素?;菊Z法格式如下所示:6.1.2列表的訪問列表名[index]其中,index表示列表的索引號。正向索引時,索引范圍是[0,len(列表名)),為一個左閉右開的區(qū)間;反向索引時,索引范圍是[-len(列表名),-1],為一個閉區(qū)間。示例代碼如下所示:>>>list7=['愛國','敬業(yè)','誠信','友善']#創(chuàng)建名為list7的列表
>>>list7#輸出全部列表元素['愛國','敬業(yè)','誠信','友善']86.1.2列表的訪問>>>list7=['愛國','敬業(yè)','誠信','友善']#創(chuàng)建名為list7的列表>>>list7[0]#輸出索引號為0的元素'愛國'>>>list7[-4] #輸出索引號為-4的元素'愛國'>>>list7[5]#輸出索引號大于列表長度時,會引發(fā)IndexError異常IndexError:listindexoutofrange96.1.2列表的訪問>>>list7=['愛國','敬業(yè)','誠信','友善']#創(chuàng)建名為list7的列表#輸出索引號必須是整數(shù)或切片,不能是字符串,否則會引發(fā)TypeError異常>>>list7['誠信'] TypeError:listindicesmustbeintegersorslices,notstr>>>list8=[[1,2,3],['A','B','C']]#創(chuàng)建名為list8,且有2個子列表的列表#索引號為1的子列表是['A','B','C'],該子列表索引號為2的元素是'C'>>>list8[1][2]'C'10【例6.1】輸出列表[['富強','民主','文明','和諧'],['自由','平等','公正','法治'],['愛國','敬業(yè)','誠信','友善']]中的每個子列表和最后一個子列表中的最后一個元素。6.1.2列表的訪問longlist=[['富強','民主','文明','和諧'],['自由','平等','公正','法治'],['愛國','敬業(yè)','誠信','友善']]foriinlonglist:print(i)print(longlist[-1][-1])示例代碼如下所示:11運行結(jié)果如下所示:6.1.2列表的訪問['富強','民主','文明','和諧']['自由','平等','公正','法治']['愛國','敬業(yè)','誠信','友善']友善12列表的切片操作也是訪問列表元素的一種方法,該方法可以訪問一定范圍內(nèi)的元素。基本語法格式如下所示:6.1.3列表的切片列表名[開始索引號:結(jié)束索引號:步長]其中,開始索引號、結(jié)束索引號和步長由一對英文方括號括起來,三者之間用英文冒號進行分隔。開始索引號是切片的開始索引位置,默認值由索引方向確定;結(jié)束索引號是切片的結(jié)束索引位置,默認值為列表的長度;切片步長為整數(shù),默認值為1。切片操作的結(jié)果遵循“左閉右開”原則,即開始索引號所指定位置的元素是包含在切片內(nèi)的,而結(jié)束索引號所指定位置的元素不包含在切片內(nèi)。13示例代碼如下所示:6.1.3列表的切片>>>list9=[0,1,2,3,4,5,6,7,8,9]#創(chuàng)建名為list9的列表
>>>list9[0:9]#返回索引號位于[0,9)區(qū)間內(nèi)的元素組成新列表[0,1,2,3,4,5,6,7,8]>>>list9[:]#等價于list9[::]或list9[0:10:1],返回原列表所有元素組成新列表[0,1,2,3,4,5,6,7,8,9]>>>list9[5:]#等價于list9[5:10:1],返回從索引號5到末尾的所有元素組成新列表[5,6,7,8,9]146.1.3列表的切片>>>list9=[0,1,2,3,4,5,6,7,8,9]#創(chuàng)建名為list9的列表
>>>list9[:5]#等價于list9[0:5:1],返回索引號位于[0,5)區(qū)間內(nèi)的元素組成新列表[0,1,2,3,4]>>>list9[5:5]#返回空列表[]15當(dāng)步長為正數(shù)時,切片操作稱為正向切片,從左向右進行索引,結(jié)束索引號應(yīng)大于開始索引號,否則切片的結(jié)果為空列表;當(dāng)步長為負數(shù)時,切片操作稱為反向切片,從右向左進行索引,結(jié)束索引號應(yīng)小于開始索引號,否則切片的結(jié)果為空列表。示例代碼如下所示:6.1.3列表的切片>>>list9=[0,1,2,3,4,5,6,7,8,9]#創(chuàng)建名為list9的列表
>>>list9[::-1]#返回原列表所有元素的逆序組成新列表[9,8,7,6,5,4,3,2,1,0]>>>list9[0:10:2]#正向切片,返回原列表中的偶數(shù)元素組成新列表[0,2,4,6,8]166.1.3列表的切片>>>list9=[0,1,2,3,4,5,6,7,8,9]#創(chuàng)建名為list9的列表
>>>list9[0:10:-2]#反向切片,結(jié)束索引號大于開始索引號,切片結(jié)果為空列表[]>>>list9[10:0:-3]#反向切片,返回原列表步長間隔為-3的元素組成新列表[9,6,3]>>>list9[10:0:3]#正向切片,結(jié)束索引號小于開始索引號,切片結(jié)果為空列表[]17需要注意的是,在列表訪問過程中,當(dāng)索引號的絕對值大于列表長度時,會引發(fā)IndexError異常,提示列表索引超出范圍。但在列表切片過程中,當(dāng)開始索引號的絕對值或者結(jié)束索引號的絕對值大于列表長度時,不會引發(fā)IndexError異常。示例代碼如下所示:6.1.3列表的切片>>>list9=[0,1,2,3,4,5,6,7,8,9]#創(chuàng)建名為list9的列表
>>>list9[-15]#列表訪問,索引號的絕對值大于列表長度時,會引發(fā)IndexError異常IndexError:listindexoutofrange>>>list9[-15:10:2]#正向切片,開始索引號的絕對值大于列表長度[0,2,4,6,8]186.1.3列表的切片>>>list9[15:0:-2]#反向切片,開始索引號的絕對值大于列表長度[9,7,5,3,1]>>>list9[15::]#等價于list9[15:10:1],切片結(jié)果為空列表[]>>>list9[0:15:2]#正向切片,結(jié)束索引號的絕對值大于列表長度[0,2,4,6,8]>>>list9[10:-15:-2]#反向切片,結(jié)束索引號的絕對值大于列表長度[9,7,5,3,1]>>>list9[:-15:]#等價于list9[0:-15:1],切片結(jié)果為空列表
[]19【例6.2】對列表list9=[0,1,2,3,4,5,6,7,8,9]進行偶數(shù)元素和奇數(shù)元素切片的輸出,并對切片后奇數(shù)元素進行求和運算。6.1.3列表的切片list9=[0,1,2,3,4,5,6,7,8,9]oushu=list9[0:10:2]#返回原列表中的偶數(shù)元素組成新列表jishu=list9[1:10:2]#返回原列表中的奇數(shù)元素組成新列表print('Oushuqiepianis',oushu)print('Jishuqiepianis',jishu)sum=0foriinjishu:sum=sum+iprint('Jishuqiepiansumis',sum)
20運行結(jié)果如下所示:6.1.3列表的切片Oushuqiepianis[0,2,4,6,8]Jishuqiepianis[1,3,5,7,9]Jishuqiepiansumis2521Python中,常用的列表元素的增加方法有append()方法、extend()方法和insert()方法。6.1.4列表元素的增加列表名.append(元素)1.append()方法append()方法屬于原地操作,即在列表尾部添加一個元素,不會產(chǎn)生新的列表,基本語法格式如下所示:append()方法每次只能增加一個元素,此元素可以是數(shù)字、字符串、列表、元組、字典、集合等數(shù)據(jù)類型。22示例代碼如下所示:6.1.4列表元素的增加>>>lista=['黃山','黃河','長江']#創(chuàng)建名為lista的列表
>>>lista.append('長城')#在列表lista的尾部增加一個元素'長城'>>>lista['黃山','黃河','長江','長城']236.1.4列表元素的增加>>>listb=[0,1,2,3,4,5]#創(chuàng)建名為listb的列表>>>listb.append([6,7])#在列表listb的尾部增加一個元素[6,7]>>>listb[0,1,2,3,4,5,[6,7]]#在列表listb的尾部增加兩個元素6和7,會引發(fā)TypeError異常>>>listb.append(6,7)TypeError:list.append()takesexactlyoneargument(2given)246.1.4列表元素的增加列表名.extend(可迭代對象)2.extend()方法extend()方法屬于原地操作,即在列表尾部添加可迭代對象中的元素,不會產(chǎn)生新的列表,基本語法格式如下所示:extend()方法的參數(shù)是一個可迭代對象(如:字符串、列表、元組、字典、集合等數(shù)據(jù)類型)。若該可迭代對象為字典,則將字典中的所有鍵增加到原列表尾部。25示例代碼如下所示:6.1.4列表元素的增加>>>listc=[0,1,2,3,4,5]#創(chuàng)建名為listc的列表
>>>listc.extend([6,7])#在列表listc的尾部增加可迭代對象中的元素>>>listc[0,1,2,3,4,5,6,7]#在列表listc的尾部增加不可迭代的整數(shù)1238,會引發(fā)TypeError異常>>>listc.extend(1238)TypeError:'int'objectisnotiterable266.1.4列表元素的增加>>>#在列表listc的尾部增加兩個元素8和9,會引發(fā)TypeError異常>>>listc.extend(8,9)TypeError:list.extend()takesexactlyoneargument(2given)#在列表listc的尾部增加字典類型的可迭代對象>>>listc.extend({8:'捌',9:'玖'})>>>listc[0,1,2,3,4,5,6,7,8,9]276.1.4列表元素的增加列表名.insert(索引號,一個元素)3.insert()方法insert()方法屬于原地操作,是在列表指定位置之前插入一個元素,不會產(chǎn)生新的列表,基本語法格式如下所示:其中,第一個參數(shù)是指定位置的索引號,第二個參數(shù)是被插入的元素。28示例代碼如下所示:6.1.4列表元素的增加>>>listd=[0,1,3,4,5]#創(chuàng)建名為listd的列表
>>>listd.insert(2,2)#在索引號為2的指定位置之前插入元素2>>>listd[0,1,2,3,4,5]>>>listd.insert(-1,6)#在索引號為-1的指定位置之前插入元素6>>>listd[0,1,2,3,4,6,5]29當(dāng)索引號為正數(shù)且大于列表長度時,在列表尾部增加一個元素;當(dāng)索引號為負數(shù)且它的絕對值大于列表長度時,在列表頭部增加一個元素。6.1.4列表元素的增加>>>liste=[0,1,2,3,4,5]#創(chuàng)建名為liste的列表
>>>liste.insert(10,'6')#索引號為正數(shù)且大于列表長度,在列表尾部增加元素'6'>>>liste[0,1,2,3,4,5,'6']#索引號為負數(shù)且它的絕對值大于列表長度,在列表頭部增加元素{0}>>>liste.insert(-10,{0})>>>liste[{0},0,1,2,3,4,5,'6']30【例6.3】我國是一個多民族融合的國家,姓氏是我們祖先遺留下來的文化瑰寶。據(jù)公安部發(fā)布的《二〇二〇年全國姓名報告》,按戶籍人口數(shù)量排名,2020年排名前八的姓氏為王、李、張、劉、陳、楊、黃、趙。對列表xingshi=['王','張','劉','陳']的元素進行增加操作,實現(xiàn)列表xingshi中的8個元素按戶籍人口數(shù)量排名的順序輸出。6.1.4列表元素的增加316.1.4列表元素的增加xingshi=['王','張','劉','陳']#創(chuàng)建名為xingshi的列表
xingshi.insert(1,'李') #在索引號為1的指定位置之前插入元素'李'xingshi.append('楊') #在列表xingshi的尾部增加一個元素'楊'xingshi.extend(['黃','趙']) #在列表xingshi的尾部增加可迭代對象['黃','趙']中的元素foriinxingshi:print(i,end='')示例代碼如下所示:運行結(jié)果如下所示:王
李
張
劉
陳
楊
黃
趙32列表元素的刪除有很多方法,常用的有del命令、pop()方法、remove()方法和clear()方法。6.1.5列表元素的刪除del列表名#刪除整個列表對象del列表名[索引號]#索引模式刪除列表中指定索引號的元素1.del命令del命令不但可以刪除整個列表對象,還可以用索引模式從列表中刪除指定位置的元素,基本語法格式如下所示:33示例代碼如下所示:6.1.5列表元素的刪除>>>listA=['A','B','C','D','E','F','G'] #創(chuàng)建名為listA的列表>>>dellistA[-1] #刪除列表索引號為-1的元素,即元素'G'>>>listA['A','B','C','D','E','F']>>>dellistA[0:2]#刪除列表索引號為0和1的元素,即元素'A'和元素'B'>>>listA['C','D','E','F']346.1.5列表元素的刪除>>>dellistA[8] #刪除列表索引號大于列表長度時,會引發(fā)IndexError異常IndexError:listassignmentindexoutofrange>>>dellistA #刪除整個列表對象>>>listA #列表listA已刪除,不存在時會引發(fā)NameError異常NameError:name'listA'isnotdefined.356.1.5列表元素的刪除列表名.pop([index])2.pop()方法pop()方法可以從列表中刪除并返回指定位置的元素,基本語法格式如下所示:其中,index是可選參數(shù),表示要刪除元素的索引號。如果index省略,則默認刪除列表中的最后一個元素并返回該元素。需要注意的是,已給定的列表不能是空列表。36示例代碼如下所示:6.1.5列表元素的刪除>>>listA=['A','B','C','D','E','F','G']#創(chuàng)建名為listA的列表>>>listA.pop()#默認刪除最后一個元素'G',并返回該值'G''G'>>>listA['A','B','C','D','E','F']>>>listA.pop(1)#刪除索引號為1的元素'B',并返回該值'B''B'>>>listA['A','C','D','E','F']376.1.5列表元素的刪除>>>listA.pop(5)#索引號超出索引范圍,會引發(fā)IndexError異常IndexError:popindexoutofrange>>>listB=[]#創(chuàng)建名為listB的空列表>>>listB.pop()#空列表使用pop()方法,會引發(fā)IndexError異常IndexError:popfromemptylist386.1.5列表元素的刪除列表名.remove(元素)3.remove()方法remove()方法可以從列表中刪除匹配的第一個元素,基本語法格式如下所示:remove()方法的參數(shù)必須是列表的元素,使用時首先在列表中檢索是否有匹配的元素,若找不到匹配的元素則引發(fā)ValueError異常。若存在多個匹配的元素,則只刪除匹配的第一個元素。39示例代碼如下所示:6.1.5列表元素的刪除>>>listC=['A','B','C','D','C','B','A']#創(chuàng)建名為listC的列表>>>listC.remove('E')#未匹配到元素'E',會引發(fā)ValueError異常ValueError:list.remove(x):xnotinlist>>>listC.remove('A')#刪除匹配到的第一個元素'A'>>>listC['B','C','D','C','B','A']406.1.5列表元素的刪除列表名.clear()4.clear()方法clear()方法用于刪除列表中的所有元素,只保留空列表對象,基本語法格式如下所示:clear()方法不需要提供任何參數(shù)。示例代碼如下所示:>>>listC=['A','B','C','D','C','B','A']#創(chuàng)建名為listC的列表>>>listC.clear()#刪除列表listC中的所有元素,listC變?yōu)榭樟斜?gt;>>listC[]41【例6.4】《百家姓》中前八姓氏為趙、錢、孫、李、周、吳、鄭、王。公安部發(fā)布的2020年前八姓氏為王、李、張、劉、陳、楊、黃、趙。要求根據(jù)《百家姓》的前八姓氏建立一個列表xingshi1,對列表xingshi1的元素進行刪除和增加操作,實現(xiàn)列表xingshi1中的8個元素按公安部公布的2020年前八姓氏的順序輸出。6.1.5列表元素的刪除426.1.5列表元素的刪除#創(chuàng)建名為xingshi1的列表xingshi1=['趙','錢','孫','李','周','吳','鄭','王']delxingshi1[0:6]#刪除列表索引號位于[0,6)區(qū)間內(nèi)的元素xingshi1.remove('鄭')#刪除匹配到的第一個元素'鄭'#在列表xingshi1的尾部增加一個可迭代對象xingshi1.extend(['李','張','劉','陳','楊','黃','趙'])foriinxingshi1:print(i,end='')示例代碼如下所示:運行結(jié)果如下所示:王
李
張
劉
陳
楊
黃
趙43可以通過重新賦值來更改列表中某個元素的值。示例代碼如下所示:6.1.6列表元素的修改>>>listC=['A','B','C','D','C','B','A']#創(chuàng)建名為listC的列表>>>listC[-3]='E'#索引號為-3的元素值從'C'改為'E'>>>listC['A','B','C','D','E','B','A']>>>listC[10]='F'#索引號超出索引范圍,會引發(fā)IndexError異常IndexError:listassignmentindexoutofrange446.1.7列表元素的索引和統(tǒng)計列表名.index(元素[,開始索引號[,結(jié)束索引號]])1.列表元素的索引號查詢針對列表中指定元素的索引號查詢,可以使用index()方法來實現(xiàn),基本語法格式如下所示:index()方法可以從列表中找出與指定元素匹配的第一個元素的索引號。其中,開始索引號是開始查找的索引位置,此參數(shù)可以不指定,默認為0;結(jié)束索引號是結(jié)束查找的索引位置,此參數(shù)可以不指定,默認為列表的長度。45示例代碼如下所示:6.1.7列表元素的索引和統(tǒng)計>>>listC=['A','B','C','D','C','B','A']#創(chuàng)建名為listC的列表>>>listC.index('B')#整個列表范圍內(nèi)查找與'B'匹配的第一個元素的索引號1>>>listC.index('C',3,6) #在索引號為[3,6)的范圍內(nèi)查找與'C'匹配的第一個元素的索引號446需要注意的是,如果找不到匹配的元素,則會引發(fā)ValueError異常。示例代碼如下所示:6.1.7列表元素的索引和統(tǒng)計>>>listC=['A','B','C','D','C','B','A']#創(chuàng)建名為listC的列表#在索引號為[3,6)的范圍內(nèi)查找不到與'A'匹配的元素,會引發(fā)ValueError異常>>>listC.index('A',3,6) ValueError:'A'isnotinlist476.1.7列表元素的索引和統(tǒng)計列表名.count(元素)2.列表元素出現(xiàn)次數(shù)統(tǒng)計針對列表中指定元素出現(xiàn)次數(shù)的統(tǒng)計,可以使用count()方法來實現(xiàn),基本語法格式如下所示:count()方法用于統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù),返回值為一個整數(shù)。48示例代碼如下所示:6.1.7列表元素的索引和統(tǒng)計>>>listC=['A','B','C','D','C','B','A']#創(chuàng)建名為listC的列表>>>listC.count('A')#統(tǒng)計元素'A'在列表中出現(xiàn)的次數(shù)2>>>listC.count('E')#統(tǒng)計元素'E'在列表中出現(xiàn)的次數(shù)049列表元素的排序通常使用sort()方法或內(nèi)置的sorted()函數(shù)來實現(xiàn);列表元素的反序通常使用reverse()方法或內(nèi)置的reversed()函數(shù)來實現(xiàn)。6.1.8列表元素的排序和反序列表名.sort(key=函數(shù)名,reverse=邏輯值)1.sort()方法sort()方法用于將列表中的元素按照一定的規(guī)則進行排序,基本語法格式如下所示:50其中,參數(shù)key用來標(biāo)識一個函數(shù)對象作為排序的依據(jù),如str()、len()、max()等函數(shù),默認值為None。參數(shù)reverse用來標(biāo)識升序或降序的規(guī)則,其值為True或False,其中True表示降序排列,F(xiàn)alse表示升序排列,若參數(shù)省略則按ASCII碼升序排列。該方法是一種原地操作方法,無返回值。示例代碼如下所示:6.1.8列表元素的排序和反序>>>listD=['AA','BBB','CCCC','D','C','B','A']#創(chuàng)建名為listD的列表>>>listD.sort()#默認排序>>>listD['A','AA','B','BBB','C','CCCC','D']516.1.8列表元素的排序和反序>>>listD=['AA','BBB','CCCC','D','C','B','A']#創(chuàng)建名為listD的列表>>>listD.sort(reverse=True)#降序排列['D','CCCC','C','BBB','B','AA','A']>>>listD.sort(key=len,reverse=True)#按字符串的長度降序排列['CCCC','BBB','AA','D','C','B','A']526.1.8列表元素的排序和反序sorted(列表名,key=函數(shù)名,reverse=邏輯值)2.sorted()函數(shù)內(nèi)置函數(shù)sorted()同樣用于將列表中的元素按照一定的規(guī)則進行排序,基本語法格式如下所示:sorted()函數(shù)中的列表名不可省略,參數(shù)key和reverse的用法與sort()方法中的相關(guān)參數(shù)用法相同。該函數(shù)進行異地操作,返回一個新的列表對象。53示例代碼如下所示:6.1.8列表元素的排序和反序>>>old=[-5,0,16,18,-10,99,60]#創(chuàng)建名為old的列表>>>new=sorted(old)#新列表默認排序>>>new[-10,-5,0,16,18,60,99]>>>old#sorted()函數(shù)不改變原列表元素的排列順序[-5,0,16,18,-10,99,60]546.1.8列表元素的排序和反序列表名.reverse()3.reverse()方法reverse()方法用于將列表中的元素按照相反的順序重新排列,基本語法格式如下所示:reverse()方法不需要參數(shù),是一種原地操作方法,無返回值。示例代碼如下所示:>>>listD=['AA','BBB','CCCC','D','C','B','A']#創(chuàng)建名為listD的列表>>>listD.reverse()#列表listD中的元素按照相反的順序重新排列>>>listD['A','B','C','D','CCCC','BBB','AA']556.1.8列表元素的排序和反序reversed(列表名)4.reversed()函數(shù)內(nèi)置函數(shù)reversed()同樣用于將列表中的元素按照相反的順序重新排列,生成一個列表對象,基本語法格式如下所示:reversed()函數(shù)生成的列表對象,需要借助list()函數(shù)查看列表的逆序結(jié)果,是一種異地操作方法。另外,該函數(shù)的功能也適用于元組數(shù)據(jù)類型。56示例代碼如下所示:6.1.8列表元素的排序和反序>>>old=[-5,0,16,18,-10,99,60]#創(chuàng)建名為old的列表>>>new=list(reversed(old))#對列表ord逆序,生成新列表new>>>new[60,99,-10,18,16,0,-5]>>>new1=tuple(reversed(old))#對列表ord逆序,生成新元組new1>>>new1(60,99,-10,18,16,0,-5)>>>old#reversed()不改變原列表元素的排列順序[-5,0,16,18,-10,99,60]57【例6.5】通過鍵盤輸入一系列整數(shù)。若輸入的數(shù)字不為0,則將該數(shù)字加入新建的空列表;若輸入的數(shù)字為0,則輸入操作結(jié)束。輸入操作結(jié)束后,將列表中的元素按從大到小的順序輸出。6.1.8列表元素的排序和反序586.1.8列表元素的排序和反序lst=[] #創(chuàng)建空列表
num=eval(input("請輸入一個整數(shù):")) #輸入整數(shù)賦給變量numwhilenum!=0:#輸入數(shù)據(jù)不為0則加入列表lst,輸入數(shù)據(jù)為0結(jié)束循環(huán)
lst.append(num)num=eval(input("請輸入一個整數(shù):"))lst.sort(reverse=True) #列表lst降序排列print("列表元素從大到小順序輸出為:",end="")foriinlst: #遍歷列表元素,輸出在一行上print(i,end="")示例代碼如下所示:59運行程序,代碼如下所示:6.1.8列表元素的排序和反序請輸入一個整數(shù):12↙請輸入一個整數(shù):10↙請輸入一個整數(shù):55↙請輸入一個整數(shù):100↙請輸入一個整數(shù):4↙請輸入一個整數(shù):16↙請輸入一個整數(shù):0↙運行結(jié)果如下所示:列表元素從大到小順序輸出為:10055161210460列表的其他操作已經(jīng)在第2章的相關(guān)章節(jié)給出了介紹,這里不再舉例。本小節(jié)以示例方式再介紹幾個利用加法、乘法和關(guān)系運算符,分別對列表進行合并、重復(fù)以及大小比較的操作方法。6.1.9列表的其他操作1.列表合并多個列表可以通過運算符“+”的方法合并成新列表,而原列表保持不變。616.1.9列表的其他操作>>>old1=[0,1,2,3]#創(chuàng)建名為old1的列表
>>>old2=[4,5,6,7]#創(chuàng)建名為old2的列表
>>>new=old1+old2#生成新列表new>>>new[0,1,2,3,4,5,6,7]>>>old1[0,1,2,3]>>>old2[4,5,6,7]示例代碼如下所示:622.列表重復(fù)列表可以通過“*”運算符乘以正整數(shù)的方法異地實現(xiàn)列表元素重復(fù)的操作,而原列表保持不變。示例代碼如下所示:6.1.9列表的其他操作>>>old1=[0,1,2,3]#創(chuàng)建名為old1的列表
>>>old2=[4,5,6,7]#創(chuàng)建名為old2的列表
>>>new1=old1*2#生成新列表new1>>>new1[0,1,2,3,0,1,2,3]>>>old1[0,1,2,3]633.列表比較兩個列表可以通過運算符:<、<=、==、!=、>=、>進行大小比較。數(shù)值類型元素按對應(yīng)位置的數(shù)值大小比較;字符串類型元素按字符串對應(yīng)位置元素的Unicode碼值比較;返回的結(jié)果為邏輯值True或False。如果列表中對應(yīng)位置的元素為數(shù)值類型和字符串類型,則不支持比較大小。示例代碼如下所示:6.1.9列表的其他操作>>>s1=[5,2,3]>>>s2=[3,2,1,5]>>>s1>s2True646.1.9列表的其他操作>>>s3=['az','bcd','f']>>>s4=['za','bcd']>>>s3>s4False>>>s5=["愛我","祖國"]#ord("愛")得到Unicode碼值為29233>>>s6=["祖國","富強"]#ord("祖")得到Unicode碼值為31062>>>s5<s6True>>>s1<s3#對應(yīng)元素數(shù)據(jù)類型不同TypeError:'<'notsupportedbetweeninstancesof'int'and'str'65【例6.6】已知列表list9=[0,1,2,3,4,5,6,7,8,9],請使用index()方法進行列表元素索引號的查詢。6.1.9列表的其他操作對問題進行分析,考慮到輸入元素時,如果找不到匹配的元素,解釋器會引發(fā)異常,這時可以先使用count()方法進行返回值的判斷,以避免解釋器引發(fā)異常。示例代碼如下所示:i=int(input("請輸入一個整數(shù):"))list9=[0,1,2,3,4,5,6,7,8,9]iflist9.count(i)>0:print("元素%d在列表list9中的索引號是:%d。"%(i,list9.index(i)))else:print("在列表list9中不存在元素%d。"%i)66運行程序,代碼如下所示:6.1.9列表的其他操作請輸入一個整數(shù):6↙運行結(jié)果如下所示:元素6在列表list9中的索引號是:6。再次運行程序,代碼如下所示:請輸入一個整數(shù):16↙運行結(jié)果如下所示:在列表list9中不存在元素16。67該示例也可以使用成員關(guān)系運算符配合index()方法進行列表元素索引號的查詢,以避免解釋器引發(fā)異常。示例代碼如下所示:6.1.9列表的其他操作i=int(input("請輸入一個整數(shù):"))list9=[0,1,2,3,4,5,6,7,8,9]ifiinlist9:print("元素%d在列表list9中的索引號是:%d。"%(i,list9.index(i)))else:print("在列表list9中不存在元素%d。"%i)68運行程序,代碼如下所示:6.1.9列表的其他操作請輸入一個整數(shù):8↙運行結(jié)果如下所示:元素8在列表list9中的索引號是:8。再次運行程序,代碼如下所示:請輸入一個整數(shù):100↙運行結(jié)果如下所示:在列表list9中不存在元素100。69元組是一種不可變的有序序列,由一對英文圓括號括起來的多個數(shù)據(jù)元素構(gòu)成,元素之間用英文逗號進行分隔。元組的操作和列表的操作有相似之處,但也有不同之處:列表可以通過增加、刪除、修改等操作,對其中的元素進行更改;而元組一旦創(chuàng)建,其中的元素就不能再更改。6.2元組6.2元組6.2.1元組的創(chuàng)建
6.2.2
元組的訪問
6.2.3元組的切片
70711.賦值法使用“=”運算符直接將一個可迭代序列賦值給元組名,即完成了元組的創(chuàng)建,基本語法格式如下所示:6.2.1元組的創(chuàng)建元組名=(可迭代序列)其中,元組名可以是任何符合Python語法命名規(guī)則的標(biāo)識符。示例代碼如下所示:>>>tuple1=() #創(chuàng)建名為tuple1的空元組>>>tuple2=(1,'1',[1],{1}) #創(chuàng)建名為tuple2,含有4個不同數(shù)據(jù)類型元素的元組72需要注意的是,當(dāng)創(chuàng)建的元組只有1個元素時,該元素后面的逗號不能省略。另外,創(chuàng)建元組時,英文圓括號可以省略。示例代碼如下所示:6.2.1元組的創(chuàng)建>>>tuple3=(6,)#元組只有1個元素6,6后面的逗號不能省略>>>tuple3(6,)>>>tuple3_1=(1)#元素后面若不加逗號時,等價于tuple3_1=1>>>tuple3_11>>>tuple4=1,'2',[3],{4}#創(chuàng)建元組tuple4時,英文圓括號可以省略>>>tuple4(1,'2',[3],{4})732.函數(shù)法使用內(nèi)置函數(shù)tuple()進行元組的創(chuàng)建,基本語法格式如下所示:6.2.1元組的創(chuàng)建元組名=tuple(可迭代對象)tuple()函數(shù)用于將一個可迭代對象(如元組、字符串或其他可迭代的數(shù)據(jù)結(jié)構(gòu))轉(zhuǎn)換為元組。其中,函數(shù)的參數(shù)為一個可迭代對象,元組名可以是任何符合Python語法命名規(guī)則的標(biāo)識符。示例代碼如下所示:>>>tuple5=tuple() #創(chuàng)建名為tuple5的空元組
>>>tuple6=tuple('CHINA') #等價于tuple6=('C','H','I','N','A')>>>tuple7=tuple(range(0,10,3)) #等價于tuple7=(0,3,6,9)74與字符串或列表元素的訪問方法類似,元組也可以使用索引方法來訪問其中的元素。在元組的訪問過程中,可以使用元組名輸出全部元組元素,也可以使用元組索引的方法輸出指定的元素或使用元組切片的方法輸出部分元素。該方法的基本語法格式如下所示:6.2.2元組的訪問元組名[索引號]元組名[開始索引號:結(jié)束索引號:步長]75示例代碼如下所示:6.2.2元組的訪問>>>tuple8=('愛國','敬業(yè)','誠信','友善')#創(chuàng)建名為tuple8的元組
>>>tuple8#輸出全部元組元素('愛國','敬業(yè)','誠信','友善')>>>tuple8[0]#輸出索引號為0的元素'愛國'>>>tuple8[-4]#輸出索引號為-4的元素'愛國'>>>tuple8[0:1]#輸出索引號位于[0,1)區(qū)間內(nèi)的元素('愛國',)766.2.2元組的訪問>>>tuple8=('愛國','敬業(yè)','誠信','友善')#創(chuàng)建名為tuple8的元組
>>>tuple8[2:2]#輸出空元組()#創(chuàng)建名為tuple9,且含有2個列表元素的元組>>>tuple9=([1,2,3],['A','B','C'])>>>tuple9[1][2]#第一個索引號表示元組中元素['A','B','C']的索引號#第二個索引號表示列表['A','B','C']內(nèi)部的索引號'C'77元組創(chuàng)建后,由于元組類型數(shù)據(jù)的不可變特性,元組中的元素不能被刪除,但是可以用del命令刪除整個元組對象。該命令的基本語法格式如下所示:6.2.3元組的刪除del元組名示例代碼如下所示:>>>tuple4=(1,'2',[3],{4})#創(chuàng)建名為tuple4的元組>>>deltuple4#刪除整個元組對象>>>tuple4#元組tuple4已刪除,
解釋器會引發(fā)NameError異常NameError:name'tuple4'isnotdefined.78需要注意的是,元組是一種不可變的數(shù)據(jù)類型,但是當(dāng)元組中有可變數(shù)據(jù)類型的元素時,可以對該元素的值進行增加、修改和刪除操作,而該元組的存儲地址不會發(fā)生改變。6.2.3元組的刪除>>>tuple4=(1,'2',[3],{4}) #創(chuàng)建名為tuple4的元組>>>id(tuple4) #查看元組tuple4的內(nèi)存地址1776746393136>>>tuple4[2].append(4)#元組tuple4索引號為2的元素,[3]變?yōu)閇3,4]>>>tuple4(1,'2',[3,4],{4})>>>id(tuple4) #查看元組tuple4的內(nèi)存地址177674639313679【例6.7】公民身份號碼是每個公民唯一的、終身不變的身份代碼。通過元組的操作可以判斷公民身份號碼是否有效。判斷方法為將18位身份號碼的前17位一一對應(yīng)乘以不同的系數(shù):7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,再將相乘后的結(jié)果相加,用相加數(shù)的結(jié)果對11進行求余運算,若余數(shù)為0~10且對應(yīng)身份號碼最末尾的驗證碼:1、0、X、9、8、7、6、5、4、3、2,其中X是羅馬數(shù)字10,則公民身份號碼為有效號碼。6.2.3元組的刪除806.2.3元組的刪除factor=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)valid=('1','0','X','9','8','7','6','5','4','3','2')idcode=input('請輸入公民身份證號碼(輸入"退出"終止程序):')whileidcode!="退出":s=0foriinrange(17):s=s+int(idcode[i])*factor[i]ifvalid[s%11]==idcode[17]:print("\t該公民身份證號碼有效!")else:print(f"\t該公民身份證號碼無效,請重新輸入!")idcode=input("請輸入公民身份證號碼:")81運行結(jié)果如下所示:6.2.3元組的刪除請輸入公民身份證號碼(輸入"退出"終止程序)公民身份證號碼有效!請輸入公民身份證號碼公民身份證號碼無效,請重新輸入!請輸入公民身份證號碼(輸入"退出"終止程序):退出82字典是一種可變的、無序的數(shù)據(jù)類型,有關(guān)其概念的描述參見第二章2.3.7節(jié)。本節(jié)主要介紹字典的創(chuàng)建、字典元素的訪問以及一些相關(guān)的操作方法。6.3字典6.3字典6.3.1字典的創(chuàng)建
6.3.2
字典元素的訪問
6.3.3字典元素的修改與增加
6.3.4
字典元素的刪除
83841.賦值法使用“=”運算符直接將一個可迭代鍵值對序列賦值給字典名,即完成了字典的創(chuàng)建,基本語法格式如下所示:6.3.1字典的創(chuàng)建字典名={鍵1:值1,鍵2:值2,鍵3:值3,……}其中,字典名可以是任何符合Python語法命名規(guī)則的標(biāo)識符。鍵值對序列中的每個元素都由以冒號分隔的鍵:值兩部分構(gòu)成,元素1對應(yīng)鍵1:值1,元素2對應(yīng)鍵2:值2等,以此類推。85示例代碼如下所示:6.3.1字典的創(chuàng)建>>>dict1={}#創(chuàng)建名為dict1的空字典>>>dict2={'內(nèi)蒙古':'呼和浩特','西藏':'拉薩','新疆':'烏魯木齊','寧夏':'銀川','廣西':'南寧'}#創(chuàng)建名為dict2且含有5個元素的字典
>>>dict3={1:'one',2:'two',3:'three'}#創(chuàng)建名為dict3且含有3個元素的字典862.函數(shù)法使用內(nèi)置函數(shù)dict()進行字典的創(chuàng)建,基本語法格式如下所示:6.3.1字典的創(chuàng)建字典名=dict(鍵1=值1,鍵2=值2,鍵3=值3,……)其中,每個元素都以“=”運算符分隔。字典名可以是任何符合Python語法命名規(guī)則的標(biāo)識。示例代碼如下所示:>>>dict4=dict()#創(chuàng)建名為dict4的空字典
>>>dict5=dict(北京='京',天津='津',上海='滬',重慶='渝')>>>dict5{'北京':'京','天津':'津','上海':'滬','重慶':'渝'}87另外,使用dict()函數(shù)創(chuàng)建字典,還有一些其他的常用方法。示例代碼如下所示:6.3.1字典的創(chuàng)建>>>#根據(jù)列表構(gòu)建字典>>>dict6=dict([['北京','京'],['天津','津'],['上海','滬'],['重慶','渝']])>>>dict6{'北京':'京','天津':'津','上海':'滬','重慶':'渝'}>>>#根據(jù)元組構(gòu)建字典>>>dict7=dict((('北京','京'),('天津','津'),('上海','滬'),('重慶','渝')))>>>dict7{'北京':'京','天津':'津','上海':'滬','重慶':'渝'}886.3.1字典的創(chuàng)建>>>keys=['北京','天津','上海','重慶']#構(gòu)建字典中鍵(keys)的信息>>>values=['京','津','滬','渝']#構(gòu)建字典中值(values)的信息>>>dict8=dict(zip(keys,values))#根據(jù)zip()函數(shù)構(gòu)建字典>>>dict8{'北京':'京','天津':'津','上海':'滬','重慶':'渝'}89字典屬于無序的數(shù)據(jù)類型,并且字典的每個元素是由鍵和值兩部分組成的,根據(jù)實際情況的需要,訪問字典元素的鍵、值信息時,主要有5種方法。(1)利用字典的鍵作為索引訪問值信息,基本語法格式如下所示:6.3.2字典元素的訪問字典名[鍵名]該方法通過鍵值對的映射關(guān)系,查找與鍵信息相對應(yīng)的值信息。若鍵信息存在,則返回與之對應(yīng)的值信息;若鍵信息不存在,則解釋器會引發(fā)KeyError異常。90示例代碼如下所示:6.3.2字典元素的訪問>>>dict5=dict(北京='京',天津='津',上海='滬',重慶='渝')>>>dict5['重慶'] #鍵信息存在,返回對應(yīng)值信息'渝'>>>dict5['寧夏'] #鍵信息不存在,會引發(fā)KeyError異常KeyError:'寧夏'91(2)利用字典對象的get()方法訪問值信息,基本語法格式如下所示:6.3.2字典元素的訪問字典名.get(key,default=None)其中,參數(shù)key表示字典的鍵,參數(shù)default表示用戶設(shè)置的值。在訪問過程中,若鍵信息存在,則返回與之對應(yīng)的值信息;若鍵信息不存在,則返回用戶設(shè)置的值,默認為None。92示例代碼如下所示:6.3.2字典元素的訪問>>>dict5=dict(北京='京',天津='津',上海='滬',重慶='渝')>>>dict5.get('上海') #鍵信息存在,返回對應(yīng)值信息'滬'>>>dict5.get('寧夏')>>>print(dict5.get('寧夏')) #鍵信息不存在,返回默認值NoneNone>>>dict5.get('寧夏','寧') #鍵信息不存在,返回設(shè)置值'寧''寧'93(3)利用字典對象的keys()方法,訪問字典中所有鍵的信息,基本語法格式如下所示:6.3.2字典元素的訪問字典名.keys()keys()方法不需要指定參數(shù),返回字典中所有鍵的信息。示例代碼如下所示:>>>dict5=dict(北京='京',天津='津',上海='滬',重慶='渝')>>>dict5.keys() #訪問字典中所有鍵的信息dict_keys(['北京','天津','上海','重慶'])94(4)利用字典對象的values()方法,訪問字典中所有值的信息,基本語法格式如下所示:6.3.2字典元素的訪問字典名.values()values()方法不需要指定參數(shù),返回字典中所有值的信息。示例代碼如下所示:>>>dict5=dict(北京='京',天津='津',上海='滬',重慶='渝')>>>dict5.values() #訪問字典中所有值的信息dict_values(['京','津','滬','渝'])95(5)利用字典對象的items()方法,訪問字典中所有鍵值對的信息,基本語法格式如下所示:6.3.2字典元素的訪問字典名.items()items()方法不需要指定參數(shù),返回字典中所有鍵值對的信息。示例代碼如下所示:>>>dict5=dict(北京='京',天津='津',上海='滬',重慶='渝')>>>dict5.items() #訪問字典中所有的鍵值對信息dict_items([('北京','京'),('天津','津'),('上海','滬'),('重慶','渝')])96【例6.8】使用循環(huán)語句遍歷dict6=dict([['北京','京'],['天津','津'],['上海','滬'],['重慶','渝']])中的鍵信息、值信息和鍵值對信息。6.3.2字典元素的訪問dict6=dict([['北京','京'],['天津','津'],['上海','滬'],['重慶','渝']])foriindict6:#默認遍歷字典的鍵信息print(i,end='')print()示例代碼如下所示:976.3.2字典元素的訪問forkeyindict6.keys():#遍歷字典的鍵信息print(key,end='')print()forvalueindict6.values():#遍歷字典的值信息print(value,end='')print()foritemindict6.items():#遍歷字典的鍵值對信息print(item,end='')98運行結(jié)果如下所示:6.3.2字典元素的訪問北京
天津
上海
重慶
北京
天津
上海
重慶
京
津
滬
渝
('北京','京')('天津','津')('上海','滬')('重慶','渝')991.索引模式利用對象名的索引模式修改或增加字典元素,基本語法格式如下所示:6.3.3字典元素的修改和增加字典名['鍵']='值'在已創(chuàng)建的字典中,若指定的鍵信息存在,則修改該鍵的值為新指定的值信息;若指定的鍵信息不存在,則在字典中增加新指定的鍵值對信息。需要注意的是,字典類型必須以鍵為索引進行賦值操作。100示例代碼如下所示:6.3.3字典元素的修改和增加>>>dict7={'陜西':'陜','甘肅':'隴','四川':'川','貴州':'貴'}>>>dict7['甘肅']='甘' #修改已存在的鍵‘甘肅’的值為‘甘’>>>dict7{'陜西':'陜','甘肅':'甘','四川':'川','貴州':'貴'}>>>dict7['云南']='云' #增加新的鍵值對信息>>>dict7{'陜西':'陜','甘肅':'甘','四川':'川','貴州':'貴','云南':'云'}1012.setdefault()方法使用setdefault()方法修改或增加字典元素,基本語法格式如下所示:6.3.3字典元素的修改和增加字典名.setdefault(key,default=None)其中,參數(shù)key表示字典的鍵,參數(shù)default表示用戶設(shè)置的值。若鍵信息存在,則返回與之對應(yīng)的值信息;若鍵信息不存在,則返回用戶設(shè)置的值,默認為None。示例代碼如下所示:>>>dict8={'河北':'冀','河南':'豫','湖北':'鄂'}>>>dict8.setdefault('湖北')#鍵信息存在,返回與之對應(yīng)的值信息'鄂'1026.3.3字典元素的修改和增加>>>dict8.setdefault('湖南') #鍵信息不存在,返回默認值None>>>dict8{'河北':
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級數(shù)學(xué)下冊第十七章勾股定理本章要點整合訓(xùn)練作業(yè)課件新版新人教版
- 息烽縣第一中學(xué)2026屆化學(xué)高一第一學(xué)期期中學(xué)業(yè)質(zhì)量監(jiān)測試題含解析
- 感恩父母教育班會全文
- 商業(yè)分析面試題庫及答案精 編全題庫
- 小青蛙教材解讀
- 高層建筑結(jié)構(gòu)健康監(jiān)測與加固技術(shù)研究
- 醫(yī)院就診流程指南
- 跳棋兒童教程講解
- 2026屆上海市高東中學(xué)高三上化學(xué)期中學(xué)業(yè)水平測試試題含解析
- 網(wǎng)絡(luò)技術(shù)大數(shù)據(jù)
- 易制毒、易制爆化學(xué)品安全培訓(xùn)
- 《融水香杉育苗技術(shù)規(guī)程》
- 美的MBS精益管理體系
- 帶狀皰疹中醫(yī)護理查房課件
- 麻醉藥品應(yīng)急處理制度及流程
- 化學(xué)-遼寧省名校聯(lián)盟2024年高三9月份聯(lián)合考試試題和答案
- 【建筑專業(yè)】16J914-1公用建筑衛(wèi)生間(完整)
- 四川省成都市2025屆高中畢業(yè)班摸底測試英語試題(含答案)
- 出口臺灣 合同
- DL-T5017-2007水電水利工程壓力鋼管制造安裝及驗收規(guī)范
- 測量設(shè)備能力分析報告
評論
0/150
提交評論