python實用教程-第三章-列表和元組課件_第1頁
python實用教程-第三章-列表和元組課件_第2頁
python實用教程-第三章-列表和元組課件_第3頁
python實用教程-第三章-列表和元組課件_第4頁
python實用教程-第三章-列表和元組課件_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章列表和元組本章將引入一個新的概念:數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是通過某種方式(例如對元素進行編號)組織在一起的數(shù)據(jù)元素的集合,這些元素可以是數(shù)字或者字符。在Python中,最基本的數(shù)據(jù)結(jié)構(gòu)是序列(sequence)。Python包含6種內(nèi)建的序列,即列表、元組、字符串、Unicode字符串、buffer對象和xrange對象。本章重點討論最常用的兩種:列表和元組。第三章列表和元組本章將引入一個新的概念:數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)1本章引言:隨著“集合號”的不斷前行,我們來到了今天的旅游目的地——Python庫。“集合號”在指定地方停止,Python快樂學習班的所有同學需要轉(zhuǎn)乘景區(qū)的“序列號”旅游大巴通往目標景點。并由專門的導游帶領(lǐng)他們進行參觀。導游為便于帶領(lǐng)Python快樂學習班的同學游玩,給每個人一個號碼牌,編號從0開始,一直到30號。為了便于導游及早大概熟悉讀者的面孔,導游安排讀者根據(jù)編號對號入座,并從0號開始排隊上“序列號”大巴,同學們根據(jù)序號排隊上車并在對應座位號上坐下。導游為便于讀者相互照應,將31名同學根據(jù)序號分成六組,前五組每組5名同學,最后一組6名同學。即第一組0至4號,第二組5至9號,第三組10至14號,第四組15至19號,第五組20至24號,第六組25至30號。本章引言:23.1通用序列操作在講解列表和元組之前,本節(jié)先介紹Python中序列的通用操作,這些操作在列表和元組中都會用到。Python3.x中所有序列都可以進行某些特定的操作,這些操作包括:索引(indexing)、分片(sliceing)、序列相加(adding)、乘法(multiplying)、成員資格、長度、最小值和最大值。3.1通用序列操作在講解列表和元組之前,本節(jié)先介紹Pyt33.1.1索引的定義與實現(xiàn)序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個元素都分配一個數(shù)字,代表它在序列中的位置,或索引,第一個索引是0,第二個索引是1,依此類推。序列中所有的元素都是有編號的——從0開始遞增。可以通過編號分別對序列的元素進行訪問。比如對于“序列號”大巴上的第二組的成員,他們的序號分別是5、6、7、8、9,將這5個序號放在一個字符串中,該字符串賦給變量group_2,意為第二組。3.1.1索引的定義與實現(xiàn)序列是Python中最基本的數(shù)4現(xiàn)對group_2做如下操作:>>>group_2='56789'#定義變量group_2,并賦值56789>>>group_2[0]#根據(jù)編號取元素,使用格式為:在方括號中輸入所取元素的編號值'5'>>>group_2[1]'6'>>>group_2[2]'7'序列中的元素是從0開始從左向右依自然順序編號的,對元素的訪問可以通過編號訪問。獲取元素的方式為變量后面跟上中括號,中括號中輸入所取元素的編號值,這個格式需要記住。現(xiàn)對group_2做如下操作:5如“序列號”大巴上的所有同學,目前已經(jīng)從0編號到30,每個序號對應一位同學。程序中的序列也是如此。這里的所指的編號就是索引,可以通過索引獲取元素。所有序列都可以通過這種方式進行索引。字符串本質(zhì)是由字符組成的序列。索引值為0的指向字符串中的第一個元素。比如在上面的示例中,索引值為0指向字符串56789中的第一個字符5,索引值為1指向字符6,索引值為2指向字符7。上面的示例是從左往右順序通過下標編號獲取序列中元素的,也可以通過從右往左的逆序方式獲取序列中的元素,其操作方式如下:>>>group_2[-1]'9'>>>group_2[-2]如“序列號”大巴上的所有同學,目前已經(jīng)從0編號到30,每個序6'8'>>>group_2[-3]'7'>>>group_2[-4]'6'Python的序列也可以從右邊開始索引,最右邊的一個元素的索引為-1,向左開始遞減。在Python中,從左向右索引稱為正數(shù)索引,從右向左稱為負數(shù)索引。使用負數(shù)索引時,Python會從最后1個元素開始計數(shù)。最后一個元素的位置編號是-1。最后一個元素的編號不是-0,這個跟數(shù)學中的概念一樣的,-0=0,-0和0都是指向第一個元素。'8'73.1.2分片的定義與實現(xiàn)序列的索引用來對單個元素進行訪問,但若需要對一個范圍內(nèi)的元素進行訪問,使用序列的索引進行操作就相對麻煩了,這時我們就需要有一個可以快速訪問指定范圍元素的索引實現(xiàn)。Python中提供了分片的實現(xiàn)方式,所謂分片,就是通過冒號相隔的兩個索引下標指定索引范圍。比如“序列號”大巴上的同學被分成了6組,若把所有同學的序號放在一個字符串中,若想要取得第二組所有同學的序號,根據(jù)前面的做法,就需要從頭開始一個一個下標去取,這樣做起來不但麻煩,也耗時。若使用分片的方式,可以快速獲取所有同學的序號。把所有同學的序號放在一個字符串中,各個序號使用逗號分隔,現(xiàn)要取得第二組所有同學的序號并打印出來。3.1.2分片的定義與實現(xiàn)序列的索引用來對單個元素進行訪8在交互模式下輸入:>>>student='0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30'>>>student[10:19] #取得第二組所有同學的序號,加上逗號分隔符,需要取得10個字符'5,6,7,8,9'>>>student[-17:-1] #負數(shù)表明從右開始計數(shù),取得最后一組所有6名同學的序號'25,26,27,28,29,3‘分片操作既支持正數(shù)索引,也支持負數(shù)索引,并且對于從序列中獲取指定部分元素非常方便。分片操作的實現(xiàn)需要提供兩個索引作為邊界,第一個索引的元素是包含在分片內(nèi)的,第二個則不包含在分片內(nèi)。這個像數(shù)學里面學習的a<=x<b,x是我們需要得到的元素,a是分片操作中的第一個索引,b是第二個索引,b不包含在x的需要范圍內(nèi)。在交互模式下輸入:9接著上面的示例,假設(shè)需要得到最后一組所有6名同學的序號,使用正數(shù)索引可以這樣操作:>>>student='0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30'>>>student[65:82]#取得最后一組所有6名同學的序號'25,26,27,28,29,30'接著上面的示例,假設(shè)需要得到最后一組所有6名同學的序號,使用10進行分片的時候,分片的開始和結(jié)束點都需要指定(不管是直接還是間接),用這種方式取連續(xù)的元素是沒有問題的,但是若要取序列中不連續(xù)的元素就會比較麻煩了或是不能操作。比如要取序列number中的所有奇數(shù),以一個序列展示出來,用前面的方法就不能實現(xiàn)了。對于這種情況,Python為我們提供了另外一個參數(shù)——步長(steplength),該參數(shù)通常是隱式設(shè)置的。在普通的分片中,步長是1——分片操作就是按照這個步長逐個遍歷序列的元素,遍歷后返回開始和結(jié)束點之間的所有元素,也可以理解為默認步長是1,既沒有設(shè)置步長時,步長隱式設(shè)置值為1。進行分片的時候,分片的開始和結(jié)束點都需要指定(不管是直接還是11輸入如下:>>>student[0:10:1][0,1,2,3,4,5,6,7,8,9]分片包含了另外一個數(shù)字。這種方式就是步長的顯式設(shè)置。這個看起來和隱式設(shè)置步長沒有什么區(qū)別,得到結(jié)果和之前也是一樣的。但是若將步長設(shè)置為比1大的數(shù),那結(jié)果會怎樣呢?輸入如下:>>>student[0:10:2][0,2,4,6,8]由輸出結(jié)果可以看到,將步長設(shè)置為2時,所得到的是偶數(shù)序列。步長設(shè)置為大于1的數(shù),那會得到一個跳過某些元素的序列。例如我們上面設(shè)置的步長為2,得到的序列是從開始到結(jié)束每隔1個的元素序列。輸入如下:12比如還可以如下進行使用:>>>student[:10:3][0,3,6,9]>>>student[2:6:3][2,5]>>>student[2:5:3][2]>>>student[1:5:3][1,4]對于一個正數(shù)步長,Python會從序列的頭部開始向右提取元素,直到最后一個元素;而對于負數(shù)步長,則是從序列的尾部開始向左提取元素,直到第一個元素。正數(shù)步長,必須讓開始點小于結(jié)束點;而負數(shù)步長,則必須讓開始點大于結(jié)束點。比如還可以如下進行使用:133.1.3序列的加法通過使用加號可以進行序列的連接操作,輸入如下:>>>[1,2,3]+[4,5,6][1,2,3,4,5,6]>>>a=[1,2]>>>b=[5,6]>>>a+b[1,2,5,6]>>>s='hello,'>>>w='world'>>>s+w'hello,world'3.1.3序列的加法通過使用加號可以進行序列的連接操作,14數(shù)字序列可以和數(shù)字序列通過加號連接,連接后的結(jié)果還是數(shù)字序列,字符串序列也可以通過加號連接,連接后的結(jié)果還是字符串序列。那數(shù)字序列是否可以和字符序列相加呢?結(jié)果是怎樣的,是數(shù)字序列還是字符串序列?數(shù)字序列可以和數(shù)字序列通過加號連接,連接后的結(jié)果還是數(shù)字序列15輸入如下:>>>[1,2]+'hello'Traceback(mostrecentcalllast):File"<pyshell#103>",line1,in<module>[1,2]+'hello'TypeError:canonlyconcatenatelist(not"str")tolist>>>type([1,2])#取得[1,2]的類型為list<class'list'>>>>type('hello')#取得hello的類型為字符串<class'str'>數(shù)字序列和字符串序列是不能通過加號連接的。只有類型相同的序列才能通過加號進行序列連接操作,不同類型的序列不能通過加號進行序列連接操作。輸入如下:163.1.4序列的乘法在Python中,序列的乘法和我們以前數(shù)學中學習的乘法需要分開理解。用一個數(shù)字n乘以一個序列會生成新的序列,在新的序列中,原來的序列將被重復n次,這個就是序列中的乘法。交互模式下輸入如下:>>>'hello'*5'hellohellohellohellohello'>>>[7]*10[7,7,7,7,7,7,7,7,7,7]序列被重復了對應的次數(shù),而不是在數(shù)學中所理解的乘法。3.1.4序列的乘法在Python中,序列的乘法和我們以前17Python中序列的乘法有什么特殊之處呢?如果要創(chuàng)建一個重復的序列,我們就可以像上面的示例一樣乘以一個想要得到的序列長度的數(shù)字,就可以快速得到需要的列表,這樣非常方便的??樟斜砜梢院唵蔚赝ㄟ^兩個中括號來表示([])——表示里面什么東西都沒有。如果要初始化一個長度為x的序列,需要使每個編碼位置上都是空值,此時需要一個值來代表空值,即里面沒有任何元素,我們需要使用None。None是Python的內(nèi)建值,它的確切含義是“這里什么也沒有”。例如我們輸入如下:>>>sq=[None]*5#初始化sq為含有5個None的序列>>>sq[None,None,None,None,None]序列的乘法在做一些重復操作、空列表和None初始化上的操作還是挺方便的。Python中序列的乘法有什么特殊之處呢?183.1.5成員資格檢測——in為了檢查一個值是否在序列中,Python為我們提供了in運算符。in運算符和前面討論過的運算符有一點不同。in運算符用于檢驗某個條件是否為真,并返回檢驗結(jié)果,檢驗結(jié)果為真返回True,結(jié)果為假則返回False。這種運算符稱作布爾運算符,返回的真值叫做布爾值。下面我們嘗試in的用法,交互模式輸入如下:>>>greeting='hello,world'>>>'w'ingreeting#檢測w是否在字符串中True>>>'a'ingreetingFalse使用in可以很好的檢測出對于的字符或數(shù)字是否在對應的列表中。3.1.5成員資格檢測——in為了檢查一個值是否在序列中,193.1.6長度、最小值和最大值Python為我們提供了長度、最大值和最小值的內(nèi)建函數(shù),對應的內(nèi)建函數(shù)分別為len、max和min。交互模式輸入如下:>>>numbers=[300,200,100,800,500]>>>len(numbers)5>>>max(numbers)800>>>min(numbers)1003.1.6長度、最小值和最大值Python為我們提供了長20>>>max(5,3,10,7)10>>>min(7,0,3,-1)-1len函數(shù)返回序列中所包含的元素的數(shù)量,max函數(shù)和min函數(shù)則分別返回序列中最大和最小的元素。max和min函數(shù)的參數(shù)不是一個序列,而是以多個數(shù)字直接作為參數(shù)。>>>max(5,3,10,7)213.2操作列表在前面的例子中已經(jīng)用了很多次列表,通過前面的示例我們看到列表的功用是比較強大的。本節(jié)將討論列表不同于元組和字符串的地方:列表是可變的(mutable),即列表的內(nèi)容是可改變的。列表有很多比較好用、比較獨特的方法。3.2操作列表在前面的例子中已經(jīng)用了很多次列表,通過前面223.2.1列表的更新我們在3.1節(jié)中所講述的所有關(guān)于序列的操作,如索引、分片、相加、乘法等都適用于列表。本節(jié)將介紹一些序列中沒有而列表中有的方法,這些方法的作用都是更新列表的,這些方法為:元素賦值、元素刪除、分片賦值和列表方法。3.2.1列表的更新我們在3.1節(jié)中所講述的所有關(guān)于序列的231.元素賦值前面有學習過賦值語句,這個是最簡單的改變列表的方式,例如a=2這樣也是一種改變列表的方式。創(chuàng)建一個列表,列表名為group,group中存放“序列號”上第一組所有5名同學的序號,通過編號標記某個特定位置的元素,對該位置的元素重新賦值,如group[1]=9,就可以實現(xiàn)元素賦值。創(chuàng)建列表group,賦值[0,1,2,3,4]后,計算機就在內(nèi)存中為group變量開辟了一塊內(nèi)存空間,內(nèi)存空間中存放數(shù)據(jù)的形式如下圖所示。1.元素賦值24當執(zhí)行g(shù)roup[1]=9后,計算機會找到group變量,并找到索引下標為1的內(nèi)存地址,將內(nèi)存為1的地址空間的值擦除,再更改上9這個值,就完成了賦值操作,如下圖所示。由圖可以看到,下標為1對應的數(shù)值已經(jīng)更改為9了,此處為便于讀者觀察,在下標為1處用了一個波浪線作為特別提示。從此時開始,group列表中的值就變更為0、9、2、3、4了,后續(xù)再對group操作,就是在這個列表值的基礎(chǔ)上進行操作了。當執(zhí)行g(shù)roup[1]=9后,計算機會找到group變量,并25用代碼實現(xiàn)上述操作如下:>>>group=[0,1,2,3,4]>>>group[1]=9 #索引下標為1的元素重新賦值為9>>>group[0,9,2,3,4]>>>group[3]=30 #同理,可以將索引下標為3的元素重新賦值為30>>>group[0,9,2,30,4]這里不要忘記索引下標的編號是從0開始的。用代碼實現(xiàn)上述操作如下:26對列表中的元素賦不同類型的值。對上面得到的group列表,在交互模式下做如下嘗試:>>>group[2]='xiaomeng' #對編號為2的元素賦值,賦一個字符串>>>group[0,9,'xiaomeng',30,4]>>>type(group)<class'list'>>>>type(group[1]) #別忘了查看類型函數(shù)的使用<class'int'>>>>type(group[2])<class'str'>由輸出結(jié)果可以看到,可以對一個列表中的元素賦不同類型的值。對列表中的元素賦不同類型的值。對上面得到的group列表,在272.增加元素由元素賦值的示例中看到,不能為一個不存在的位置賦值,這么說就是一旦初始化了一個列表,就不能再往這個列表中增加元素了。這樣若需要往列表中增加元素,就非常麻煩了,需要對整個列表中的元素都復制一遍,再添加需要增加的元素,Python中有提供對應的方法來幫助我們做這件事情。看如下輸入:>>>group[0,9,'xiaomeng',30,4]>>>group.append('try')>>>group[0,9,'xiaomeng',30,4,'try']可以使用append()方法來解決。append()方法是一個用于在列表末尾添加新的對象的方法。該方法的語法如下:list.append(obj)此語法中l(wèi)ist指的是列表,obj指的是需要添加到list列表末尾的對象。2.增加元素28append()方法操作列表時,返回的列表不是一個新列表,而是直接在原來的列表上做修改,然后將修改過的列表直接返回。如果是創(chuàng)建新列表,就會多出一倍的存儲空間。以group列表為例,未使用append()方法之前,group列表中的內(nèi)容是[0,9,'xiaomeng',30,4],這是已經(jīng)占用了一塊存儲空間的值。使用append()方法后,若創(chuàng)建了新列表,就會在內(nèi)存中再開辟一塊新的存儲空間,新開辟的存儲空間中存放的內(nèi)容是[0,9,'xiaomeng',30,4,'try'],和原列表比起來,就相當于增加了一倍的存儲空間。而直接修改列表的情形會是這樣的:內(nèi)容是[0,9,'xiaomeng',30,4]的存儲空間繼續(xù)占有,使用append()方法后,會在現(xiàn)有的存儲空間中增加一小塊內(nèi)存,用來存放新增加的try字符串,相對于原列表,僅僅增加了try字符串所占據(jù)的存儲,而不是增加一倍的存儲空間。append()方法操作列表時,返回的列表不是一個新列表,而293.刪除元素上面學習了往列表中增加元素,那么是否可以往列表中刪除元素呢?看如下示例:>>>group[0,9,'xiaomeng',30,4,'try','test']>>>len(group) #使用序列中獲取長度的函數(shù)7>>>delgroup[6] #刪除最后一個元素,注意索引下標與序列長度的關(guān)系>>>print('刪除最后一個元素后的結(jié)果:',group)刪除最后一個元素后的結(jié)果:[0,9,'xiaomeng',30,4,'try']>>>len(group)63.刪除元素30>>>group[0,9,'xiaomeng',30,4,'try']>>>delgroup[2] #刪除索引下標為2的元素>>>print('刪除索引下標為2的元素后的結(jié)果:',group)刪除索引下標為2的元素后的結(jié)果:[0,9,30,4,'try']>>>len(group)5由輸出結(jié)果可以看到,使用del可以刪除列表中的元素。>>>group31使用del除了可以刪除列表中的字符串,也可以刪除列表中的數(shù)字。在交互模式下輸入:>>>group[0,9,30,4,'try']>>>len(group)5>>>delgroup[3]>>>print('刪除索引下標為3的元素后的結(jié)果:',group)刪除索引下標為3的元素后的結(jié)果:[0,9,30,'try']>>>len(group)4由輸出結(jié)果可以看到,已經(jīng)從group列表中刪除了對應的數(shù)字。使用del除了可以刪除列表中的字符串,也可以刪除列表中的數(shù)字324.分片賦值分片賦值是列表的一個強大的特性。先看如下示例:>>>list('北京將舉辦2022年的冬奧會')['北','京','將','舉','辦','2','0','2',‘2','年','的','冬','奧','會']>>>greeting=list('welcometobeijing')>>>greeting['w','e','l','c','o','m','e','','t','o','','b','e','i','j','i','n','g']>>>greeting[11:18]['b','e','i','j','i','n','g']>>>greeting[11:18]=list('china')>>>greeting['w','e','l','c','o','m','e','','t','o','','c','h','i','n','a']可以通過分片賦值直接對列表做變更。4.分片賦值33看下面的示例:>>>field=list('ae')>>>field['a','e']>>>field[1:1]=list('bcd')>>>field['a','b','c','d','e']>>>goodnews=list('北京將舉辦冬奧會')>>>goodnews['北','京','將','舉','辦','冬','奧','會']>>>goodnews[5:5]=list('2022年的')>>>goodnews['北','京','將','舉','辦','2','0','2',‘2','年','的','冬','奧','會']由輸出結(jié)果可以看到,使用列表的分片賦值功能,可以在不替換任何原有元素的情況下在任意位置插入新元素??聪旅娴氖纠?43.2.2多維列表目前,我們接觸到的列表都是一維的,也就是一個列表里面有多個元素,每個元素對應一個數(shù)值或一個字符串。那列表中是否可以有列表呢,這里就引入了多維列表的概念。所謂多維列表,就是列表中的元素也是列表。就如“序列號”大巴上的同學,目前分成了6個小組,對于“序列號”大巴,我們可以看成是一個列表,6個小組也可以看成在“序列號”大巴里的6個列表,每個列表中又分別存放了各個同學的序號。在交互模式下表示如下:>>>bus=[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29,30]]3.2.2多維列表目前,我們接觸到的列表都是一維的,也就35>>>bus[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29,30]]>>>group1=bus[0]>>>group1#取得第一組所有同學的序號[0,1,2,3,4]>>>type(group1)<class'list'>>>>group2=bus[1]#取得第二組所有同學的序號>>>group2[5,6,7,8,9]>>>type(group2)<class'list'>>>>bus36>>>group6=bus[5]#取得第三組所有同學的序號>>>group6[25,26,27,28,29,30]>>>type(group6)<class'list'>>>>number0=group1[0]#取得0號同學的序號>>>number00>>>number30=group6[5]#取得30號同學的序號>>>number3030在列表中可以嵌套列表,嵌套的列表取出后還是列表。>>>group6=bus[5]#取得第三組所有同學的373.2.3列表方法我們之前的章節(jié)已經(jīng)介紹了函數(shù),本節(jié)介紹一個與函數(shù)密切相關(guān)的概念——方法。方法是一個與某些對象有緊密聯(lián)系的函數(shù),對象可能是列表、數(shù)字,也可能是字符串或者其它類型的對象。方法的調(diào)用方式我們前面有一個示例,調(diào)用語法如下:對象.方法(參數(shù))由上面的語法及前面append()方法的示例我們可知:方法的定義方式是將對象放到方法名之前,兩者之間用一個點號隔開,方法后面的括號中可以根據(jù)需要帶上參數(shù)。除語法上的一些不同,方法調(diào)用和函數(shù)調(diào)用很類似。列表中有count、index、sort等一些比較常用的方法,下面逐一進行介紹。3.2.3列表方法我們之前的章節(jié)已經(jīng)介紹了函數(shù),本節(jié)介紹381.append該方法前面已經(jīng)介紹,其功能是在列表的末尾添加新的對象。使用方式為如前面講解的:list.append(obj)在實際項目應用中,列表中的append()方法是使用頻率最高的一個方法,涉及列表操作的,都或多或少需要用上append()方法進行元素的添加。1.append392.extendextend()方法用于在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)。extend()方法的語法如下:list.extend(seq)此語法中l(wèi)ist代表的是列表,seq代表元素列表。該方法使用示例如下:>>>a=['hello','world']>>>b=['python','is','funny']>>>a.extend(b)>>>a['hello','world','python','is','funny']2.extend40extend()方法和序列相加有什么不同之處?extend()方法和序列相加的主要區(qū)別是:extend()方法修改了被擴展的列表;原始的連接操作會返回一個全新的列表,而不會修改原始的變量。在實際項目應用中,extend()方法也是一個使用頻率較高的方法,特別在涉及多個列表合并時,使用extend()方法非常便捷。extend()方法和序列相加有什么不同之處?413.indexindex()方法用于從列表中找出某個值第一個匹配項的索引位置。index()方法的語法如下:list.index(obj)此語法中l(wèi)ist代表的是列表,obj代表查找的對象。該方法使用示例如下:>>>field=['hello','world','python','is','funny']>>>print('hello的索引位置為:',field.index('hello'))hello的索引位置為:0>>>print('python的索引位置為:',field.index('python'))python的索引位置為:

2在實際項目應用中,index()方法的使用不是很多,在功能上,使用in可以達到和index()相同的功能,除非要返回搜索對象的具體索引位置時,才考慮使用index()方法,其他情形使用in會更高效和便捷。3.index424.insertinsert()方法用于從列表中找出某個值第一個匹配項的索引位置。insert()方法的語法:list.insert(index,obj)此語法中l(wèi)ist代表的是列表,index代表對象obj需要插入的索引位置,obj代表要插入列表中的對象。該方法使用示例如下:>>>num=[1,2,3]>>>print('插入之前的num:',num)插入之前的num:[1,2,3]>>>num.insert(2,'插入位置在2之后,3之前')>>>print('插入之后的num:',num)插入之后的num:[1,2,'插入位置在2之后,3之前',3]在實際項目應用中,insert()方法較多地用于在列表指定位置插入指定元素,多用于單個元素的插入,當涉及大量元素插入時,使用分片賦值要更好一些。4.insert435.sortsort()方法用于對原列表進行排序,如果指定參數(shù),則使用參數(shù)指定的比較方法進行排序。sort()方法的語法:list.sort(func)此語法中l(wèi)ist代表的是列表,func為可選參數(shù),如果指定了該參數(shù)會使用該參數(shù)的方法進行排序。該方法使用示例如下:>>>num=[5,8,1,3,6]>>>num.sort()>>>print('num調(diào)用sort方法后:',num)num調(diào)用sort方法后:[1,3,5,6,8]在實際項目應用中,sort()方法應用頻率不是很高,在需要涉及一些稍微簡單的排序時會使用sort()方法,很多時候可能需要開發(fā)者自己實現(xiàn)有針對性的排序方法。5.sort446.copycopy()方法用于復制列表,類似于

a[:]。copy()方法的語法:list.copy()此語法中l(wèi)ist代表的是列表,不需要傳入?yún)?shù)。該方法使用示例如下:>>>field=['study','python','is','happy']>>>copyfield=field.copy()>>>print('復制操作結(jié)果:',copyfield)復制操作結(jié)果:['study','python','is','happy']操作結(jié)果和該方法的意思一樣,是原原本本的拷貝操作。在實際項目應用中,copy()方法的使用頻率不是很高,但copy()方法是一個比較有用的方法,在列表的結(jié)構(gòu)復制上很好用,效率也比較高。6.copy457.removeremove()方法用于移除列表中某個值的第一個匹配項。remove()方法的語法:list.remove(obj)此語法中l(wèi)ist代表的是列表,obj為列表中藥移除的對象。該方法使用示例如下:>>>field=['女排','精神','中國','精神','學習','精神']>>>print('移除前列表field:',field)移除前列表field:['女排','精神','中國','精神','學習','精神']>>>field.remove('精神')>>>print('移除后列表field:',field)移除后列表field:['女排','中國','精神','學習','精神']在實際項目應用中,remove()方法的使用頻率不高。7.remove468.poppop()方法用于移除列表中的一個元素(默認最后一個元素),并且返回該元素的值。pop()方法的語法:list.pop(obj=list[-1])此語法中l(wèi)ist代表的是列表,obj為可選擇參數(shù),代表要移除列表元素的對象。該方法使用示例如下:>>>field=['hello','world','python','is','funny']>>>field.pop()#不傳參數(shù),默認移除最后一個元素'funny'>>>print('移除元素后的field:',field)移除元素后的field:['hello','world','python','is']>>>field.pop(3)#移除編號為3的元素'is'8.pop47特別提醒:在Python中,pop()方法是唯一一個既能修改列表又能返回元素值(除了None)的列表方法。使用pop()方法可以實現(xiàn)一種常見的數(shù)據(jù)結(jié)構(gòu)——棧。棧的原理就像堆放盤子一樣,一次操作一個盤子,要將若干盤子堆成一堆,只能在一個盤子的上面放另一個盤子;要拿盤子時,只能從頂部一個一個地往下拿,最后放入的盤子是最先被拿的。棧也是這樣,最后放入棧的元素最先被移除,稱為LIFO(LastInFirstOut),即后進先出。在實際項目應用中,pop()方法的使用頻率并不高,但不能以此否認pop()方法的使用價值,pop()是一個非常有使用價值的方法,在一些問題的處理上它有獨特的功能特性,讀者在使用時可以多加留意。特別提醒:在Python中,pop()方法是唯一一個既能修改489.reversereverse()方法用于反向列表中元素。reverse()方法的語法:list.reverse()此語法中l(wèi)ist代表的是列表,該方法不需要傳入?yún)?shù)。該方法使用示例如下:>>>num=[1,2,3]>>>print('列表反轉(zhuǎn)前num:',num)列表反轉(zhuǎn)前num:[1,2,3]>>>num.reverse()>>>print('列表反轉(zhuǎn)后:',num)列表反轉(zhuǎn)后:[3,2,1]在實際項目應用中,reverse()方法一般會配合sort()方法一起使用,目的是更方便于排序,為排序節(jié)省時間或內(nèi)存開銷,對于不同業(yè)務場景會有不同的節(jié)省方式。9.reverse4910.clearclear()方法用于清空列表,類似于

dela[:]。clear()方法的語法:list.clear()此語法中l(wèi)ist代表的是列表,不需要傳入?yún)?shù)。該方法使用示例如下:>>>field=['study','python','is','happy']>>>field.clear()>>>print('field調(diào)用clear方法后的結(jié)果:',field)field調(diào)用clear方法后的結(jié)果:[]在實際項目應用中,clear()方法一般應用在涉及大量列表操作,且類別元素比較多的場景中,在列表元素比較多時,一般會涉及分批次的操作,每批次操作時,為減少對內(nèi)存的占用,一般會使用clear()方法先清空列表,高效且快速。10.clear5011.countcount()方法用于統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù)。count()方法的語法如下:list.count(obj)此語法中l(wèi)ist代表的是列表,obj代表列表中統(tǒng)計的對象。該方法使用示例如下:>>>field=list('hello,world')>>>field['h','e','l','l','o',',','w','o','r','l','d']>>>print('列表field中,字母o的個數(shù):',field.count('o'))#統(tǒng)計列表中字符個數(shù)列表field中,字母o的個數(shù):

2在實際項目應用中,count()方法用得比較少,是一個低頻使用的方法。11.count5112.高級排序如果希望元素能按特定的方式進行排序可以自定義比較方法。sort方法有兩個可選參數(shù)——key和reverse??慈缦率纠?gt;>>field=['study','python','is','happy']>>>field.sort(key=len)#按字符串由段到長排序>>>field.sort(key=len,reverse=True)#按字符串排序,傳遞兩個參數(shù)>>>field['python','study','happy','is']>>>num=[5,8,1,3,6]>>>num.sort(reverse=True)#排序后逆序>>>num[8,6,5,3,1]在實際項目應用中,高級排序應用的場景比較多,也各有特色,不同的項目會有不同的需求場景,需要視具體項目而定。12.高級排序523.3操作元組Python的元組與列表類似,不同之處在于元組的元素不能修改(是否記得我們前面多次提到的字符串,它也是不能修改的)。創(chuàng)建元組的方法很簡單:如果你使用逗號分隔了一些值,那么你就自動創(chuàng)建了元組。如下輸入:>>>6,7,8(6,7,8)>>>'hi','python'('hi','python')該操作用逗號分隔了一些值,結(jié)果輸出是元組。3.3操作元組Python的元組與列表類似,不同之處在于元533.3.1tuple函數(shù)的定義與使用tuple函數(shù)的功能和list函數(shù)基本上是一樣的:以一個序列作為參數(shù)并把它轉(zhuǎn)換為元組。如果參數(shù)是元組,那么參數(shù)就會被原樣返回。如下輸入:>>>tuple('hi')('h','i')>>>tuple(('hi','python')) #參數(shù)是元組('hi','python')>>>tuple(['hi','python']) #列表轉(zhuǎn)元組('hi','python')>>>list(('hi','python')) #元組轉(zhuǎn)列表['hi','python']tuple函數(shù)傳入元組參數(shù)后,得到的返回值就是傳入?yún)?shù)。3.3.1tuple函數(shù)的定義與使用tuple函數(shù)的功能543.3.2元組的基本操作和列表一樣,元組也有一些基本的操作。如訪問元組、修改元組、刪除元組、索引和截取等操作。當然,這里的修改、刪除和截取等操作和列表的操作不太一樣。3.3.2元組的基本操作和列表一樣,元組也有一些基本的操551.訪問元組元組可以使用下標索引來訪問元組中的值,看如下示例:>>>strnum=('hi','python',2017,2018)>>>print('strnum[1]is:',strnum[1])strnum[1]is:python>>>print('strnum[3]is:',strnum[3])strnum[3]is:2018>>>numbers=(1,2,3,4,5,6)>>>print('numbers[5]is:',numbers[5])numbers[5]is:6訪問元組是比較普通的應用,也是元組必備的功能。1.訪問元組562.元組組合元組中的元素值是不允許修改的,但我們可以對元組進行連接組合,看如下示例:>>>greeting=('hi','python')>>>yearnum=(2018,)>>>print("合并結(jié)果為:",greeting+yearnum)合并結(jié)果為:('hi','python',2018)元組連接組合的實質(zhì)是生成了一個新的元組,并非是修改了原本的某一個元組。2.元組組合573.刪除元組元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組,看如下示例:>>>greeting=('hi','python')>>>greeting('hi','python')>>>print('刪除元組greeting前:',greeting)刪除元組greeting前:('hi','python')>>>delgreeting3.刪除元組58>>>print('刪除元組greeting后:',greeting)Traceback(mostrecentcalllast):File"<pyshell#281>",line1,in<module>print('刪除元組greeting后:',greeting)NameError:name'greeting'isnotdefined>>>greetingTraceback(mostrecentcalllast):File"<pyshell#282>",line1,in<module>greetingNameError:name'greeting'isnotdefined以上實例元組被刪除后,輸出變量會有異常信息,輸出結(jié)果告訴我們field沒有定義,即field已經(jīng)不存在了。>>>print('刪除元組greeting后:',gre594.元組索引、截取因為元組也是一個序列,所以我們可以訪問元組中的指定位置的元素,也可以截取索引中的一段元素,看如下示例:>>>field=('hello','world','welcome')>>>field[2]'welcome'>>>field[-2]'world'>>>field[1:]('world','welcome')4.元組索引、截取603.3.3元組內(nèi)置函數(shù)Python元組提供了一些內(nèi)置函數(shù),如計算元素個數(shù)、返回最大值、最小值、列表轉(zhuǎn)換等函數(shù)。len(tuple),計算元組元素個數(shù)。使用方式如下:>>>greeting=('hello','world','welcome')>>>len(greeting)3>>>greeting=('hello',)>>>len(greeting)1>>>greeting=()>>>len(greeting)03.3.3元組內(nèi)置函數(shù)Python元組提供了一些內(nèi)置函數(shù)61max(tuple)函數(shù)用于返回元組中元素的最大值,使用方式如下:>>>number=(39,28,99,88,56)>>>max(number)99>>>tup=('6','3','8')>>>max(tup)'8'>>>mix=(38,26,'77')>>>mix(38,26,'77')>>>max(mix)Traceback(mostrecentcalllast):File"<pyshell#296>",line1,in<module>max(mix)TypeError:'>'notsupportedbetweeninstancesof'str'and'int'max(tuple)函數(shù)既可以應用于數(shù)值元組,也可以應用于字符串元組,但是不能應用于數(shù)值和字符串混合的元組中。max(tuple)函數(shù)用于返回元組中元素的最大值,使用方式62min(tuple)函數(shù)用于返回元組中元素的最小值,使用方式如下:>>>number=(39,28,99,88,56)>>>min(number)28>>>tup=('6','3','8')>>>min(tup)'3'>>>mix=(38,26,'77')>>>mix(38,26,'77')>>>min(mix)Traceback(mostrecentcalllast):File"<pyshell#298>",line1,in<module>min(mix)TypeError:'<'notsupportedbetweeninstancesof'str'and'int'min(tuple)函數(shù)既可以應用于數(shù)值元組,也可以應用于字符串元組,但是同樣不能應用于數(shù)值和字符串混合的元組中。min(tuple)函數(shù)用于返回元組中元素的最小值,使用方式633.4列表與元組的區(qū)別列表與元組的區(qū)別是元組的元素不能修改。元組一旦初始化就不能修改。不可變的元組有什么意義?因為元組不可變,所以代碼更安全。如果可能,能用元組代替列表就盡量用元組。3.4列表與元組的區(qū)別列表與元組的區(qū)別是元組的元素不能修643.5活學活用——角色互換通過前面幾節(jié)的學習,我們知道了列表和元組是可以相互轉(zhuǎn)化的,但對于在元組中有列表的情況,元組轉(zhuǎn)換為列表時,得到的會是什么結(jié)果?對于在列表中有元組的情況,列表轉(zhuǎn)換為元組時,又會得到什么結(jié)果?具體代碼示例參考書本代碼。3.5活學活用——角色互換通過前面幾節(jié)的學習,我們知道了653.6技巧點撥1.對序列中的元素進行訪問時,嘗試輸入序列中不存在的編號,如在greeting='hello'示例中輸入greeting[10],看看會得到什么結(jié)果,執(zhí)行g(shù)reeting[-10]又會得到什么結(jié)果。2.觀察以下輸入,思考會得到什么結(jié)果,并想想為什么會是這個結(jié)果。>>>max(ab,abc,abcd)Traceback(mostrecentcalllast):File"<pyshell#308>",line1,in<module>max(ab,abc,abcd)NameError:name'ab'isnotdefined>>>max('ab','abc','abcd')'abcd‘詳情參考書中解答。3.6技巧點撥1.對序列中的元素進行訪問時,嘗試輸入序列663.7問題探討1.通用序列操作中所介紹的方法對列表和元組都通用嗎?2.在實際項目應用中,根據(jù)什么來選擇使用列表還是元組?3.7問題探討1.通用序列操作中所介紹的方法對列表和元組673.8章節(jié)回顧1.回顧通用序列的基本操作,索引、分片、序列相加、乘法等分別是怎樣實現(xiàn)的。2.回顧列表的基本操作,如何更新列表,列表的基本方法有哪些,各自怎樣使用。3.回顧元組的基本操作,元組的內(nèi)置函數(shù)有哪些。4.回顧列表與元組的區(qū)別。3.8章節(jié)回顧1.回顧通用序列的基本操作,索引、分片、序683.9實戰(zhàn)演練參考書中練習3.9實戰(zhàn)演練參考書中練習69第三章列表和元組本章將引入一個新的概念:數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是通過某種方式(例如對元素進行編號)組織在一起的數(shù)據(jù)元素的集合,這些元素可以是數(shù)字或者字符。在Python中,最基本的數(shù)據(jù)結(jié)構(gòu)是序列(sequence)。Python包含6種內(nèi)建的序列,即列表、元組、字符串、Unicode字符串、buffer對象和xrange對象。本章重點討論最常用的兩種:列表和元組。第三章列表和元組本章將引入一個新的概念:數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)70本章引言:隨著“集合號”的不斷前行,我們來到了今天的旅游目的地——Python庫?!凹咸枴痹谥付ǖ胤酵V?,Python快樂學習班的所有同學需要轉(zhuǎn)乘景區(qū)的“序列號”旅游大巴通往目標景點。并由專門的導游帶領(lǐng)他們進行參觀。導游為便于帶領(lǐng)Python快樂學習班的同學游玩,給每個人一個號碼牌,編號從0開始,一直到30號。為了便于導游及早大概熟悉讀者的面孔,導游安排讀者根據(jù)編號對號入座,并從0號開始排隊上“序列號”大巴,同學們根據(jù)序號排隊上車并在對應座位號上坐下。導游為便于讀者相互照應,將31名同學根據(jù)序號分成六組,前五組每組5名同學,最后一組6名同學。即第一組0至4號,第二組5至9號,第三組10至14號,第四組15至19號,第五組20至24號,第六組25至30號。本章引言:713.1通用序列操作在講解列表和元組之前,本節(jié)先介紹Python中序列的通用操作,這些操作在列表和元組中都會用到。Python3.x中所有序列都可以進行某些特定的操作,這些操作包括:索引(indexing)、分片(sliceing)、序列相加(adding)、乘法(multiplying)、成員資格、長度、最小值和最大值。3.1通用序列操作在講解列表和元組之前,本節(jié)先介紹Pyt723.1.1索引的定義與實現(xiàn)序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個元素都分配一個數(shù)字,代表它在序列中的位置,或索引,第一個索引是0,第二個索引是1,依此類推。序列中所有的元素都是有編號的——從0開始遞增。可以通過編號分別對序列的元素進行訪問。比如對于“序列號”大巴上的第二組的成員,他們的序號分別是5、6、7、8、9,將這5個序號放在一個字符串中,該字符串賦給變量group_2,意為第二組。3.1.1索引的定義與實現(xiàn)序列是Python中最基本的數(shù)73現(xiàn)對group_2做如下操作:>>>group_2='56789'#定義變量group_2,并賦值56789>>>group_2[0]#根據(jù)編號取元素,使用格式為:在方括號中輸入所取元素的編號值'5'>>>group_2[1]'6'>>>group_2[2]'7'序列中的元素是從0開始從左向右依自然順序編號的,對元素的訪問可以通過編號訪問。獲取元素的方式為變量后面跟上中括號,中括號中輸入所取元素的編號值,這個格式需要記住。現(xiàn)對group_2做如下操作:74如“序列號”大巴上的所有同學,目前已經(jīng)從0編號到30,每個序號對應一位同學。程序中的序列也是如此。這里的所指的編號就是索引,可以通過索引獲取元素。所有序列都可以通過這種方式進行索引。字符串本質(zhì)是由字符組成的序列。索引值為0的指向字符串中的第一個元素。比如在上面的示例中,索引值為0指向字符串56789中的第一個字符5,索引值為1指向字符6,索引值為2指向字符7。上面的示例是從左往右順序通過下標編號獲取序列中元素的,也可以通過從右往左的逆序方式獲取序列中的元素,其操作方式如下:>>>group_2[-1]'9'>>>group_2[-2]如“序列號”大巴上的所有同學,目前已經(jīng)從0編號到30,每個序75'8'>>>group_2[-3]'7'>>>group_2[-4]'6'Python的序列也可以從右邊開始索引,最右邊的一個元素的索引為-1,向左開始遞減。在Python中,從左向右索引稱為正數(shù)索引,從右向左稱為負數(shù)索引。使用負數(shù)索引時,Python會從最后1個元素開始計數(shù)。最后一個元素的位置編號是-1。最后一個元素的編號不是-0,這個跟數(shù)學中的概念一樣的,-0=0,-0和0都是指向第一個元素。'8'763.1.2分片的定義與實現(xiàn)序列的索引用來對單個元素進行訪問,但若需要對一個范圍內(nèi)的元素進行訪問,使用序列的索引進行操作就相對麻煩了,這時我們就需要有一個可以快速訪問指定范圍元素的索引實現(xiàn)。Python中提供了分片的實現(xiàn)方式,所謂分片,就是通過冒號相隔的兩個索引下標指定索引范圍。比如“序列號”大巴上的同學被分成了6組,若把所有同學的序號放在一個字符串中,若想要取得第二組所有同學的序號,根據(jù)前面的做法,就需要從頭開始一個一個下標去取,這樣做起來不但麻煩,也耗時。若使用分片的方式,可以快速獲取所有同學的序號。把所有同學的序號放在一個字符串中,各個序號使用逗號分隔,現(xiàn)要取得第二組所有同學的序號并打印出來。3.1.2分片的定義與實現(xiàn)序列的索引用來對單個元素進行訪77在交互模式下輸入:>>>student='0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30'>>>student[10:19] #取得第二組所有同學的序號,加上逗號分隔符,需要取得10個字符'5,6,7,8,9'>>>student[-17:-1] #負數(shù)表明從右開始計數(shù),取得最后一組所有6名同學的序號'25,26,27,28,29,3‘分片操作既支持正數(shù)索引,也支持負數(shù)索引,并且對于從序列中獲取指定部分元素非常方便。分片操作的實現(xiàn)需要提供兩個索引作為邊界,第一個索引的元素是包含在分片內(nèi)的,第二個則不包含在分片內(nèi)。這個像數(shù)學里面學習的a<=x<b,x是我們需要得到的元素,a是分片操作中的第一個索引,b是第二個索引,b不包含在x的需要范圍內(nèi)。在交互模式下輸入:78接著上面的示例,假設(shè)需要得到最后一組所有6名同學的序號,使用正數(shù)索引可以這樣操作:>>>student='0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30'>>>student[65:82]#取得最后一組所有6名同學的序號'25,26,27,28,29,30'接著上面的示例,假設(shè)需要得到最后一組所有6名同學的序號,使用79進行分片的時候,分片的開始和結(jié)束點都需要指定(不管是直接還是間接),用這種方式取連續(xù)的元素是沒有問題的,但是若要取序列中不連續(xù)的元素就會比較麻煩了或是不能操作。比如要取序列number中的所有奇數(shù),以一個序列展示出來,用前面的方法就不能實現(xiàn)了。對于這種情況,Python為我們提供了另外一個參數(shù)——步長(steplength),該參數(shù)通常是隱式設(shè)置的。在普通的分片中,步長是1——分片操作就是按照這個步長逐個遍歷序列的元素,遍歷后返回開始和結(jié)束點之間的所有元素,也可以理解為默認步長是1,既沒有設(shè)置步長時,步長隱式設(shè)置值為1。進行分片的時候,分片的開始和結(jié)束點都需要指定(不管是直接還是80輸入如下:>>>student[0:10:1][0,1,2,3,4,5,6,7,8,9]分片包含了另外一個數(shù)字。這種方式就是步長的顯式設(shè)置。這個看起來和隱式設(shè)置步長沒有什么區(qū)別,得到結(jié)果和之前也是一樣的。但是若將步長設(shè)置為比1大的數(shù),那結(jié)果會怎樣呢?輸入如下:>>>student[0:10:2][0,2,4,6,8]由輸出結(jié)果可以看到,將步長設(shè)置為2時,所得到的是偶數(shù)序列。步長設(shè)置為大于1的數(shù),那會得到一個跳過某些元素的序列。例如我們上面設(shè)置的步長為2,得到的序列是從開始到結(jié)束每隔1個的元素序列。輸入如下:81比如還可以如下進行使用:>>>student[:10:3][0,3,6,9]>>>student[2:6:3][2,5]>>>student[2:5:3][2]>>>student[1:5:3][1,4]對于一個正數(shù)步長,Python會從序列的頭部開始向右提取元素,直到最后一個元素;而對于負數(shù)步長,則是從序列的尾部開始向左提取元素,直到第一個元素。正數(shù)步長,必須讓開始點小于結(jié)束點;而負數(shù)步長,則必須讓開始點大于結(jié)束點。比如還可以如下進行使用:823.1.3序列的加法通過使用加號可以進行序列的連接操作,輸入如下:>>>[1,2,3]+[4,5,6][1,2,3,4,5,6]>>>a=[1,2]>>>b=[5,6]>>>a+b[1,2,5,6]>>>s='hello,'>>>w='world'>>>s+w'hello,world'3.1.3序列的加法通過使用加號可以進行序列的連接操作,83數(shù)字序列可以和數(shù)字序列通過加號連接,連接后的結(jié)果還是數(shù)字序列,字符串序列也可以通過加號連接,連接后的結(jié)果還是字符串序列。那數(shù)字序列是否可以和字符序列相加呢?結(jié)果是怎樣的,是數(shù)字序列還是字符串序列?數(shù)字序列可以和數(shù)字序列通過加號連接,連接后的結(jié)果還是數(shù)字序列84輸入如下:>>>[1,2]+'hello'Traceback(mostrecentcalllast):File"<pyshell#103>",line1,in<module>[1,2]+'hello'TypeError:canonlyconcatenatelist(not"str")tolist>>>type([1,2])#取得[1,2]的類型為list<class'list'>>>>type('hello')#取得hello的類型為字符串<class'str'>數(shù)字序列和字符串序列是不能通過加號連接的。只有類型相同的序列才能通過加號進行序列連接操作,不同類型的序列不能通過加號進行序列連接操作。輸入如下:853.1.4序列的乘法在Python中,序列的乘法和我們以前數(shù)學中學習的乘法需要分開理解。用一個數(shù)字n乘以一個序列會生成新的序列,在新的序列中,原來的序列將被重復n次,這個就是序列中的乘法。交互模式下輸入如下:>>>'hello'*5'hellohellohellohellohello'>>>[7]*10[7,7,7,7,7,7,7,7,7,7]序列被重復了對應的次數(shù),而不是在數(shù)學中所理解的乘法。3.1.4序列的乘法在Python中,序列的乘法和我們以前86Python中序列的乘法有什么特殊之處呢?如果要創(chuàng)建一個重復的序列,我們就可以像上面的示例一樣乘以一個想要得到的序列長度的數(shù)字,就可以快速得到需要的列表,這樣非常方便的。空列表可以簡單地通過兩個中括號來表示([])——表示里面什么東西都沒有。如果要初始化一個長度為x的序列,需要使每個編碼位置上都是空值,此時需要一個值來代表空值,即里面沒有任何元素,我們需要使用None。None是Python的內(nèi)建值,它的確切含義是“這里什么也沒有”。例如我們輸入如下:>>>sq=[None]*5#初始化sq為含有5個None的序列>>>sq[None,None,None,None,None]序列的乘法在做一些重復操作、空列表和None初始化上的操作還是挺方便的。Python中序列的乘法有什么特殊之處呢?873.1.5成員資格檢測——in為了檢查一個值是否在序列中,Python為我們提供了in運算符。in運算符和前面討論過的運算符有一點不同。in運算符用于檢驗某個條件是否為真,并返回檢驗結(jié)果,檢驗結(jié)果為真返回True,結(jié)果為假則返回False。這種運算符稱作布爾運算符,返回的真值叫做布爾值。下面我們嘗試in的用法,交互模式輸入如下:>>>greeting='hello,world'>>>'w'ingreeting#檢測w是否在字符串中True>>>'a'ingreetingFalse使用in可以很好的檢測出對于的字符或數(shù)字是否在對應的列表中。3.1.5成員資格檢測——in為了檢查一個值是否在序列中,883.1.6長度、最小值和最大值Python為我們提供了長度、最大值和最小值的內(nèi)建函數(shù),對應的內(nèi)建函數(shù)分別為len、max和min。交互模式輸入如下:>>>numbers=[300,200,100,800,500]>>>len(numbers)5>>>max(numbers)800>>>min(numbers)1003.1.6長度、最小值和最大值Python為我們提供了長89>>>max(5,3,10,7)10>>>min(7,0,3,-1)-1len函數(shù)返回序列中所包含的元素的數(shù)量,max函數(shù)和min函數(shù)則分別返回序列中最大和最小的元素。max和min函數(shù)的參數(shù)不是一個序列,而是以多個數(shù)字直接作為參數(shù)。>>>max(5,3,10,7)903.2操作列表在前面的例子中已經(jīng)用了很多次列表,通過前面的示例我們看到列表的功用是比較強大的。本節(jié)將討論列表不同于元組和字符串的地方:列表是可變的(mutable),即列表的內(nèi)容是可改變的。列表有很多比較好用、比較獨特的方法。3.2操作列表在前面的例子中已經(jīng)用了很多次列表,通過前面913.2.1列表的更新我們在3.1節(jié)中所講述的所有關(guān)于序列的操作,如索引、分片、相加、乘法等都適用于列表。本節(jié)將介紹一些序列中沒有而列表中有的方法,這些方法的作用都是更新列表的,這些方法為:元素賦值、元素刪除、分片賦值和列表方法。3.2.1列表的更新我們在3.1節(jié)中所講述的所有關(guān)于序列的921.元素賦值前面有學習過賦值語句,這個是最簡單的改變列表的方式,例如a=2這樣也是一種改變列表的方式。創(chuàng)建一個列表,列表名為group,group中存放“序列號”上第一組所有5名同學的序號,通過編號標記某個特定位置的元素,對該位置的元素重新賦值,如group[1]=9,就可以實現(xiàn)元素賦值。創(chuàng)建列表group,賦值[0,1,2,3,4]后,計算機就在內(nèi)存中為group變量開辟了一塊內(nèi)存空間,內(nèi)存空間中存放數(shù)據(jù)的形式如下圖所示。1.元素賦值93當執(zhí)行g(shù)roup[1]=9后,計算機會找到group變量,并找到索引下標為1的內(nèi)存地址,將內(nèi)存為1的地址空間的值擦除,再更改上9這個值,就完成了賦值操作,如下圖所示。由圖可以看到,下標為1對應的數(shù)值已經(jīng)更改為9了,此處為便于讀者觀察,在下標為1處用了一個波浪線作為特別提示。從此時開始,group列表中的值就變更為0、9、2、3、4了,后續(xù)再對group操作,就是在這個列表值的基礎(chǔ)上進行操作了。當執(zhí)行g(shù)roup[1]=9后,計算機會找到group變量,并94用代碼實現(xiàn)上述操作如下:>>>group=[0,1,2,3,4]>>>group[1]=9 #索引下標為1的元素重新賦值為9>>>group[0,9,2,3,4]>>>group[3]=30 #同理,可以將索引下標為3的元素重新賦值為30>>>gro

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論