列表與元組教學(xué)課件_第1頁
列表與元組教學(xué)課件_第2頁
列表與元組教學(xué)課件_第3頁
列表與元組教學(xué)課件_第4頁
列表與元組教學(xué)課件_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第6章 列表與元組序列的通用操作列表的專用操作元組與列表的區(qū)別及相互轉(zhuǎn)換6.1 序列的通用操作6.1.1 序列的索引與分片1序列的索引序列中的每一個元素被分配一個位置編號,稱為索引(index)。第一個元素的索引為0,第二個元素的索引為1,依此類推。序列的元素可以通過索引進(jìn)行訪問,一般格式為:序列名索引例如: greeting=hello greeting0H除了常見的正向索引,Python序列還支持反向索引,即負(fù)數(shù)索引,可以從最后一個元素開始計數(shù),最后一個元素的索引是-1,倒數(shù)第二個元素的索引是-2,依此類推。使用負(fù)數(shù)索引,可以在無需計算序列長度的前提下很方便地定位序列中的元素。例如: gr

2、eeting-1o2序列的分片分片(slice)就是取出序列中某一范圍內(nèi)的元素,從而得到一個新的序列。序列分片的一般格式為:序列名起始索引:終止索引:步長其中,起始索引是提取部分的第一個元素的編號,終止索引對應(yīng)的元素不包含在分片范圍內(nèi)。步長為非零整數(shù),當(dāng)步長為負(fù)數(shù)時,從右到左提取元素。當(dāng)忽略參數(shù)時,起始元素默認(rèn)為第一個,終止索引默認(rèn)為最后一個,步長默認(rèn)為1。例如: number=1,2,3,4,5,6,7,8,9,10 number3:64,5,6 number0:11注意:分片操作是產(chǎn)生新的序列,不會改變原來的序列。例如: x=a,b,c,d y=x: id(x),id(y)(3581205

3、6, 35833816)x:將產(chǎn)生一個新的列表,所以x和y代表不同的對象。而語句y=x則是給x的內(nèi)容再取一個名字y,也就是x和y都指向相同的存儲內(nèi)容,并沒有實現(xiàn)存儲內(nèi)容的真正的復(fù)制??聪旅娴恼Z句。 x=a,b,c,d y=x id(x),id(y)(35812736, 35812736)6.1.2 序列的計算1序列相加通過使用加號可以進(jìn)行序列的連接操作。例如: 1,2,3+4,5,61,2,3,4,5,6注意,只有兩種相同類型的序列才能進(jìn)行連接操作。2序列相乘用整數(shù)n乘以一個序列會生成新的序列,在新序列中,原來的序列將重復(fù)n次。當(dāng)n (42,)*5(42, 42, 42, 42, 42) 2*

4、1,2,3,4,51, 2, 3, 4, 5, 1, 2, 3, 4, 53序列比較兩個序列對象可以進(jìn)行比較操作,其規(guī)則是兩個序列的第一個元素先進(jìn)行比較,如果第1個元素可以得出結(jié)果,那么就得出序列比較結(jié)果。如果第一個元素一樣,則繼續(xù)比較下一個元素,如果元素本身也是序列,則對元素進(jìn)行以上過程。例如: (1,2,3) p=(1,2,3,4,5) 5 in pTrue6.1.3 序列處理函數(shù)1len()、max()和min()函數(shù)len(s):返回序列中包含元素的個數(shù),即序列長度。min(s):返回序列中最小的元素。max(s):返回序列中最大的元素。2 sum()函數(shù)和reduce()函數(shù)sum(

5、s):返回序列s中所有元素的和。要求元素必須為數(shù)值,否則出現(xiàn)TypeError錯誤。reduce(f,s,n):reduce()函數(shù)把序列s的前兩個元素作為參數(shù)傳給函數(shù)f,返回計算的結(jié)果和序列的下一個元素重新作為f的參數(shù),直到序列的最后一個元素。reduce()函數(shù)的返回值是函數(shù)f的返回值。在Python 3.x中,reduce()函數(shù)已經(jīng)從全局名字空間中移出,放到了functools模塊中。如果需要,使用functools.reduce()調(diào)用格式。在Python 2.x中,reduce是一個全局函數(shù),可直接調(diào)用。3enumerate()和zip()函數(shù)enumerate(iter):接收一

6、個可迭代對象作為參數(shù),返回一個enumerate對象,該對象生成由iter每個元素的索引值和元素值組成的元組。zip(s0,s1,sn):接收任意多個序列作為參數(shù),返回一個可迭代對象,其第一個元素是s0,s1,sn這些元素的第一個元素組成的一個元組,后面的元素依次類推。若參數(shù)的長度不等,則返回列表的長度和參數(shù)中長度最短的對象相同。利用*號操作符,可以將對象解壓還原。4sorted()函數(shù)和reversed()函數(shù)sorted(iterable,key=None,reverse=False):函數(shù)返回對可迭代對象iterable中元素進(jìn)行排序后的列表,函數(shù)返回副本,原始輸入不變。iterable

7、是可迭代類型;key指定一個接收一個參數(shù)的函數(shù),這個函數(shù)用于計算比較的鍵值,默認(rèn)值為None;reverse代表排序規(guī)則,當(dāng)reverse為True時按降序排序;reverse為False時按升序,默認(rèn)按升序。reversed(iterable):對可迭代對象iterable的元素按逆序排列,返回一個新的可迭代變量。5all()和any()函數(shù)設(shè)s為一個序列,下面的內(nèi)置函數(shù)可用于表、元組和字符串。all(s):如果序列s所有元素都為True,則返回True,否則返回False。any(s):如果序列任一元素為True,則返回True,否則返回False。6.1.4 序列拆分賦值使用賦值語句,可

8、以將序列賦給一個變量,也可以將序列拆分,賦給多個變量。例如: x=1,2,3,4 x1, 2, 3, 4 a,b,c,d=1,2,3,4 print(a,b,c,d)1 2 3 4可以在變量名前面加星號(*),將序列的多個元素值賦給相應(yīng)的變量。例如: a,*b,c=1,2,3,4 print(a,b,c)1 2, 3 4 *a,b,c=1,2,3,4 print(a,b,c)1, 2 3 46.2 列表的專有操作6.2.1 列表的基本操作1列表元素賦值使用索引編號來為某個特定的元素賦值,從而可以修改列表。例如: x=1,1,1 x1=10 x1, 10, 12刪除元素從列表中刪除元素也很容易,

9、使用del語句來實現(xiàn)。例如: names=Alice,Beth,Cecil,Jack,Earl del names2 namesAlice, Beth, Jack, Earl3分片賦值使用分片賦值可以給列表的多個元素提示賦值。例如: name=list(Perl) name2:=list(ar) nameP, e, a, r4列表解析在一個序列的值上應(yīng)用一個任意表達(dá)式,將其結(jié)果收集到一個新的列表中并返回。它的基本形式是一個中括號里面包含一個for語句對一個可迭代對象進(jìn)行迭代。例如: i for i in range(8)0, 1, 2, 3, 4, 5, 6, 7在列表解析中,可以增加測試語句

10、和嵌套循環(huán)。一般形式如下:表達(dá)式 for 目標(biāo)1 in 可迭代對象1 if 條件1 for 目標(biāo)n in 可迭代對象n if 條件n任意數(shù)量嵌套的for循環(huán)同時關(guān)聯(lián)可選的if 測試,其中if測試語句是可選的,for上下之間表示的是一個嵌套關(guān)系。例如: (x,y) for x in range(5) if x%2=0 for y in range(5) if y%2=1(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)6.2.2 列表的常用方法1適用于序列的方法s.count(x):返回x在序列s中出現(xiàn)的次數(shù)。例如: x=1,2,1,2,2 x.coun

11、t(2)3s.index(x):返回x在s中第一次出現(xiàn)的下標(biāo)。2只適用于列表的方法s.append(x):在列表s的末尾附加x元素。例如: lst=1,2,3 lst.append(4) lst1, 2, 3, 4s.extend(s1):在列表s的末尾添加列表s1的所有元素。s.sort():對列表s中的元素排序。s.reverse():將列表s中的元素逆序排列。s.pop(i):刪除并返回列表s中指定位置i的元素,默認(rèn)是最后一個元素.若i超出列表長度,則拋出IndexError異常。s.insert(i,x):在列表s的i位置處插入x,如果i大于列表的長度,則插入到列表最后。s.remov

12、e(x):從列表s中刪除x,若x不存在,則拋出ValueError異常。6.3 元組與列表的比較1元組與列表的區(qū)別(1)元組是不可變的序列類型,元組能對不需要改變的數(shù)據(jù)進(jìn)行寫保護(hù),使數(shù)據(jù)更安全。列表是可變的序列類型,可以添加、刪除或搜索列表中的元素。(2)元組使用小括號定義用逗號分隔的元素,而列表中的元素應(yīng)該包括在中括號中。雖然元組使用小括號,但訪問元組元素時,要使用中括號按索引或分片來獲得對于元素的值。(3)元組可以在字典中當(dāng)作關(guān)鍵字使用,而列表不能當(dāng)作字典關(guān)鍵字使用,因為列表不是不可改變的。(4)只要不嘗試修改元組,那么大多數(shù)情況下把它們當(dāng)作列表來進(jìn)行操作。2元組元素的可變性元組中的數(shù)據(jù)一

13、旦定義就不允許更改,因此元組沒有append()方法、extend()方法或insert()方法,無法向元組中添加元素;元組也沒有pop()方法或remove()方法,不能從元組中刪除元素;元組也沒有sort()方法或reverse()方法,不能修改元組的值。刪除元組的元素是不可能的,但可以使用del語句刪除整個元組。3元組與列表的轉(zhuǎn)換元組和列表可以通過list()函數(shù)和tuple()函數(shù)實現(xiàn)相互轉(zhuǎn)換。list()函數(shù)接收一個元組參數(shù),返回一個包含同樣元素的列表;tuple()函數(shù)接收一個列表參數(shù),返回一個包含同樣元素的元組。從實現(xiàn)效果上看,tuple()函數(shù)凍結(jié)列表,達(dá)到保護(hù)的目的,而lis

14、t()函數(shù)融化元組,達(dá)到修改的目的。6.4 序列的應(yīng)用6.4.1 數(shù)據(jù)排序在Python中,數(shù)據(jù)排序可以直接使用sort方法或sorted()函數(shù),也可以自己編寫排序的程序。假設(shè)將n個數(shù)按從小到大順序排列后輸出,排序過程通常分為3個步驟:將需要排序的n個數(shù)存放到一個列表中(設(shè)列表x)。將列表x中的元素從小到大排序,即x0最小、x1次之、xn-1最大。將排序后的x列表輸出。其中第步是關(guān)鍵。排序的方法很多,這里介紹最基本的排序算法。例6-1 利用簡單交換排序法,將n個數(shù)按從小到大順序排列后輸出。分析:簡單交換排序法(simple exchange sort)的基本思路是將位于最前面的數(shù)和它后面的數(shù)

15、進(jìn)行比較,比較若干次以后,即可將最小的數(shù)放到最前面。為了實現(xiàn)排序過程,可以用雙重循環(huán),外循環(huán)控制比較的輪數(shù),n個數(shù)排序需比較n-1輪,設(shè)有循環(huán)變量i,i從0變化到n-2。內(nèi)循環(huán)控制每輪比較的次數(shù),第i輪比較n-i次,設(shè)有循環(huán)變量j,j從i+1變化到n-1。每次比較的兩個元素分別為xi與xj。簡單交換排序法例6-2 利用選擇排序法,將n個數(shù)按從小到大順序排列后輸出。分析:選擇排序法(selection sort)的基本思路是在n個數(shù)中,找出最小的數(shù),使它與x0互換,然后從n-1個數(shù)中,找最小的數(shù),使它與x1互換,依此類推,直至剩下最后一個數(shù)據(jù)為止。選擇排序法例6-3 利用冒泡排序法,將n個數(shù)按從

16、小到大順序排列后輸出。分析:冒泡排序法(bubble sort)的基本思路是將相鄰的兩個數(shù)兩兩進(jìn)行比較,使小的在前,大的在后。用雙重循環(huán)來組織排序,外循環(huán)控制比較的輪數(shù),n個數(shù)排序需比較n-1輪,設(shè)有循環(huán)變量i,i從0變化到n-2。內(nèi)循環(huán)控制每輪比較的次數(shù),第i輪比較n-i次,設(shè)有循環(huán)變量j,j從0變化到n-2-i。每次比較的兩個元素分別為xj與xj+1。冒泡排序法6.4.2 數(shù)據(jù)檢索例6-4 設(shè)有n個數(shù)已存在序列a中,利用順序檢索查找數(shù)據(jù)x是否在序列a中。分析:順序檢索的基本思想是對所存儲的數(shù)據(jù)從第一項開始,依次與所要檢索的數(shù)據(jù)進(jìn)行比較,直到找到該數(shù)據(jù),或?qū)⑷吭囟颊彝赀€沒有找到該數(shù)據(jù)為止

17、。例6-5 設(shè)有n個數(shù)已按大小順序排列好并存于序列a中,利用二分檢索方法查找數(shù)據(jù)x是否在序列a中。分析:若被檢索的是一組有序數(shù)據(jù),則可以用二分檢索方法。(1)在0到n-1中間選一個正整數(shù)k,用k把原來有序的序列分成3個子序列:a0、a1、ak-2。ak-1。ak、ak+1、an-1。(2)用ak-1與x比較,若x=ak-1,查找過程結(jié)束。若xak-1,也用同樣的方法把序列ak、ak+1、an-1分成3個序列,直到找到x或得到“x找不到”的結(jié)論為止。這是一種應(yīng)用“分治策略”的解題思想。當(dāng)k=n/2時,稱為二分檢索法。二分檢索算法6.4.3 矩陣運算例6-6 給定一個mn矩陣,其元素互不相等,求每行絕對值最大的元素及其所在列號。分析:首先要考慮的是如何用列表數(shù)據(jù)表示矩陣,用列表表示一維矩陣是顯然的,當(dāng)列表的元素是一個列表時,列表可以表示二維矩陣,接下來考慮求矩陣一行絕對值最大的元素及其列號的程序段,再將處理一行的程序段重復(fù)執(zhí)行m次,即可求出每行的絕對值最大的元素及其列號。例6-7 矩陣乘法。已知mn矩陣A和np矩陣B,

溫馨提示

  • 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

提交評論