Python大學(xué)教程 第五章_第1頁(yè)
Python大學(xué)教程 第五章_第2頁(yè)
Python大學(xué)教程 第五章_第3頁(yè)
Python大學(xué)教程 第五章_第4頁(yè)
Python大學(xué)教程 第五章_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章 Python數(shù)據(jù)結(jié)構(gòu) 列表列表:類似于C語(yǔ)言中的數(shù)組概念,一個(gè)列表中可以包含任意個(gè)數(shù)據(jù),每一個(gè)數(shù)據(jù)稱為元素。Python允許同一個(gè)列表中元素的數(shù)據(jù)類型不同,可以是整數(shù)、字符串等基本類型,也可以是列表、集合及其他自定義類型的對(duì)象。 創(chuàng)建一個(gè)列表的最簡(jiǎn)單方法是將列表元素放在一對(duì)方括號(hào)(“”和“”)內(nèi)并以逗號(hào)分隔,并用賦值運(yùn)算符將一個(gè)列表賦值給變量。 列表通過Python內(nèi)置的list類定義。也可以使用list類的構(gòu)造函數(shù)來創(chuàng)建列表。 Python中的列表可以包括不同類型的元素。 列表的基本操作下標(biāo)訪問元素下標(biāo)訪問元素列表中的元素可以通過下標(biāo)運(yùn)算符來訪問 。列表的下標(biāo)是從0開始的。如果一個(gè)列

2、表的長(zhǎng)度為r,則合法的下標(biāo)在0到r-1之間。 listindex可以像變量一樣使用,可以進(jìn)行讀取或?qū)懭?,所以它也被稱為下標(biāo)變量。 Python也允許使用負(fù)數(shù)作為下表來引用相對(duì)于列表末端的位置。 列表的基本操作列表的拼接和復(fù)制列表的拼接和復(fù)制 在Python中,可以使用運(yùn)算符“+”來連接兩個(gè)列表,并返回一個(gè)新列表。 使用運(yùn)算符“*”可以將一個(gè)列表復(fù)制若干次后形成一個(gè)新的列表。 列表的遍歷列表的遍歷 對(duì)列表內(nèi)的每個(gè)元素均做一次訪問稱為對(duì)列表的一次遍歷。 while循環(huán)寫法for循環(huán)寫法列表的基本操作in/not in運(yùn)算運(yùn)算符符使用in/not in運(yùn)算符可以判斷一個(gè)元素是否在列表中。 列表切片列

3、表切片列表的切片操作使用語(yǔ)法liststart:end來返回列表list的一個(gè)片段。這個(gè)片段是原列表從下標(biāo)start到end-1的元素所構(gòu)成的一個(gè)新列表。 在切片操作中,起始下標(biāo)和結(jié)束下標(biāo)是可以省略的。如果省略起始下標(biāo),則起始下標(biāo)默認(rèn)為0,即從列表的第一個(gè)元素開始截取。如果省略結(jié)束下標(biāo),則結(jié)束下標(biāo)默認(rèn)為列表長(zhǎng)度,即截取到列表的最后一個(gè)元素。 切片操作也可以使用負(fù)數(shù)下標(biāo),表示倒數(shù)第若干個(gè)元素。 切片操作也可以對(duì)列表進(jìn)行寫操作。 列表的基本操作列表的比較列表的比較 關(guān)系運(yùn)算符(、=、=、!=)也可以用來對(duì)列表進(jìn)行比較。兩個(gè)列表的比較規(guī)則如下:比較兩個(gè)列表的第一個(gè)元素,如果兩個(gè)元素相同,則繼續(xù)比較下

4、面兩個(gè)元素;如果兩個(gè)元素不同,則返回兩個(gè)元素的比較結(jié)果;一直重復(fù)這個(gè)過程直到有不同的元素或比較完所有的元素為止。 列表推導(dǎo)式列表推導(dǎo)式 列表推導(dǎo)式提供了一個(gè)生成列表的簡(jiǎn)潔方法。一個(gè)列表推導(dǎo)式由方括號(hào)括起來,方括號(hào)內(nèi)包含后跟著一個(gè)for子句的表達(dá)式,之后可以接0到多個(gè)for或if子句。列表推導(dǎo)式可以產(chǎn)生一個(gè)由表達(dá)式求值結(jié)果組成的列表。 列表相關(guān)的函數(shù) 列表相關(guān)的內(nèi)置函數(shù):all(iterable)any(iterable)len(s)max(iterable)min(iterable)sorted(iterable, cmp, key, reverse)sum(iterable, start)

5、列表相關(guān)的函數(shù) 列表類的成員函數(shù):list.append(x) list.extend(L)list.insert(i, x)list.remove(x)list.pop(i)list.index(x)list.count(x)list.sort(cmp=None, key=None, reverse=False)list.reverse()在函數(shù)中使用列表 列表作為函數(shù)參數(shù) :函數(shù)可以在列表中作為參數(shù)進(jìn)行傳遞。因?yàn)榱斜硎强勺儗?duì)象,所以列表的內(nèi)容可能會(huì)在函數(shù)內(nèi)改變。另外,列表作為參數(shù)時(shí)也可以定義默認(rèn)值,或者使用關(guān)鍵字參數(shù)進(jìn)行調(diào)用。 列表作為函數(shù)返回值:列表也可以作為函數(shù)的返回值,以便傳遞到函數(shù)

6、外。列表查找 線性查找:從列表的一端開始,逐一檢查列表中的元素,直到找到需要的元素或者查找完整個(gè)列表。 二分查找:又稱折半查找,是列表查找的另一種常用方法。二分查找的效率比線性查找要高,但前提是待查列表必須已經(jīng)是有序的。二分查找的基本思想是每次查找會(huì)將待查區(qū)域分為大小相近的兩部分,并確定目標(biāo)元素所在的部分。列表排序 冒泡排序 :在排序過程中的某一時(shí)刻,待排序列表R被劃分為有序區(qū)(R0:i-1)和無序區(qū)(Ri:n-1)兩部分。初始時(shí)刻i=0,有序區(qū)沒有元素。冒泡排序通過無序區(qū)中相鄰元素間的比較和位置的交換,使最小的元素如氣泡一般逐漸“上浮”,使得冒泡排序的每一趟排序會(huì)將無序區(qū)的最小元素移動(dòng)到無序

7、區(qū)的頂端,并將其歸入有序區(qū)。快速排序:在列表中任取一個(gè)元素(一般取第一個(gè)元素)作為基準(zhǔn),將該元素放入適當(dāng)位置后,列表被此元素劃分為兩部分,所有比該元素小的元素都放置在前一部分,所有比該元素大的元素都放置在后一部分。對(duì)劃分出來的兩部分分別遞歸地重復(fù)該操作,直到每部分內(nèi)只有一個(gè)元素或?yàn)榭?。圖5-3表示了快速排序的一趟排序過程。 多維列表 多維列表:列表中的元素可以是任何類型的對(duì)象,包括用列表來作為其元素。二維列表可以理解為一個(gè)由行組成的列表。二維列表的每一行都可以使用下標(biāo)訪問,稱為行下標(biāo)。每一行中的值可以通過另一個(gè)下標(biāo)來訪問,稱為列下標(biāo)。二維列表中的每個(gè)值都可以使用myMatij來訪問,其中i和j

8、分別代表行下標(biāo)和列下標(biāo)。要遍歷一個(gè)二維列表,一般需要使用兩層嵌套的循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)。 元組元組是不可變的,即元組一旦創(chuàng)建,其中的元素就不可以被修改。元組由用逗號(hào)分隔的若干值組成。如果在使用中不會(huì)對(duì)列表的內(nèi)容進(jìn)行修改,那么可以使用元組來代替列表。創(chuàng)建一個(gè)元組最簡(jiǎn)單的方法就是用一對(duì)圓括號(hào)括起來組成一個(gè)元組,元組內(nèi)的元素使用逗號(hào)分隔。元組通過Python內(nèi)置的tuple類進(jìn)行定義,因此也可以使用tuple函數(shù)創(chuàng)建一個(gè)列表。使用tuple函數(shù)也可以將列表、字符串等元素轉(zhuǎn)換為元組。元組也是序列,因此一些用于列表的基本操作也可以用在元組上??梢允褂孟聵?biāo)訪問元組中的元素,使用in和not in運(yùn)算符來判斷元素

9、是否在元組中,對(duì)元組進(jìn)行切片,等等。元組封裝與序列拆封元組封裝:指的是將多個(gè)值自動(dòng)封裝到一個(gè)元組中。t = 1, 1, 2, 3, 5序列拆封:元組封裝的逆操作,用來將一個(gè)封裝起來的序列自動(dòng)拆分為若干個(gè)基本數(shù)據(jù)。tuple1 = (1, 2, 3)x, y, z = tuple1同時(shí)賦值的語(yǔ)法是將元組封裝和序列拆封操作相結(jié)合了。 元組封裝與序列拆封還可以應(yīng)用到函數(shù)傳參,但此時(shí)為了避免語(yǔ)義沖突,需要添加一個(gè)“*”。元組與列表的比較元組和列表都屬于序列。但列表屬于可變序列,可以隨意地修改列表匯總的元素值、增加和刪除元素;而元組屬于不可變序列,元組中的元素一旦定義就不允許進(jìn)行增加、刪除和替換操作。因

10、此,tuple類沒有提供append()、insert()和remove()等函數(shù)。在使用下標(biāo)訪問或者切片操作時(shí),也只允許讀取元組中的值而不能對(duì)其進(jìn)行修改。元組的訪問和處理速度比列表更快。因此,如果所需要定義的序列內(nèi)容不會(huì)進(jìn)行修改,那么最好使用元組而不是列表。另外,使用元組也可以使元素在實(shí)現(xiàn)上無法被修改,從而使代碼更加安全。集合集合與列表相似,都可以用來存儲(chǔ)多個(gè)元素。不同于列表的是,集合中的元素彼此不能相同并且不按照任何特定的順序放置??梢詫⑷舾蓚€(gè)元素用一對(duì)花括號(hào)()括起來以創(chuàng)建一個(gè)集合。集合內(nèi)的元素同樣使用逗號(hào)分隔。一個(gè)集合也可以包含不同類型的元素。 Python使用內(nèi)置類set來定義集合。

11、使用set函數(shù)可以將列表、元組、字符串等類型轉(zhuǎn)換為集合。集合的基本操作由于集合的元素存儲(chǔ)是無序的,因此不能使用下標(biāo)來訪問集合中的元素。但是集合可以使用forin循環(huán)來遍歷其中的所有元素。使用in或not in運(yùn)算符可以判斷一個(gè)元素是否在一個(gè)集合中。函數(shù)也同樣適用于集合。例如,可以使用len函數(shù)求集合的大小,使用max函數(shù)求集合中的最大元素,使用sum函數(shù)計(jì)算集合內(nèi)所有元素的和,等等。set類常用的成員函數(shù)如下。set.add(elem)set.remove(elem)set.discard(elem)set.pop()set.clear()集合運(yùn)算如果集合A的任意一個(gè)元素都是集合B的元素,那么

12、稱集合A為集合B的子集,稱集合B為集合A的超集。 Python中的set類提供了兩個(gè)成員函數(shù)來判斷兩個(gè)集合是否滿足子集和超集的關(guān)系。s1.issubset(s2)函數(shù)用來判斷s1是否為s2的子集,s1.issuperset(s2)用來判斷s1是否為s2的超集。Python提供了求交集、并集、差集和對(duì)稱差集等集合運(yùn)算。(1)使用ersection(s2)或者s1&s2可以計(jì)算兩個(gè)集合的交集。(2)使用s1.union(s2)或者s1|s2可以計(jì)算兩個(gè)集合的并集。(3)使用s1.difference(s2)或者s1-s2可以計(jì)算兩個(gè)集合的差集。(4)使用s1.symmetric

13、_difference(s2)或者s1s2可以計(jì)算兩個(gè)集合的對(duì)稱差集。集合與列表的比較集合和列表都可以存儲(chǔ)多個(gè)元素。但是集合與列表有兩大不同之處。第一,集合不能存儲(chǔ)重復(fù)的元素;第二,集合中的元素是無序的,不能通過下標(biāo)運(yùn)算符來訪問元素。此外,集合還支持如何判斷集合關(guān)系以及四種集合運(yùn)算。列表的存儲(chǔ)方式為順序存儲(chǔ),即將其中的元素依次存儲(chǔ)在一塊連續(xù)的內(nèi)存區(qū)域中。而集合采用的存儲(chǔ)方式更加復(fù)雜。這使得在執(zhí)行查找元素和刪除元素的操作時(shí),使用集合比使用列表的效率高。字典字典是一個(gè)存儲(chǔ)鍵值對(duì)集合的Python容器。它通過使用關(guān)鍵字來快速獲取、刪除和更新值。字典是按照關(guān)鍵字存儲(chǔ)值的集合。一個(gè)字典對(duì)象中無序地存儲(chǔ)了

14、若干個(gè)條目。每個(gè)條目都是一個(gè)鍵值對(duì),即一個(gè)關(guān)鍵字和一個(gè)對(duì)應(yīng)值。關(guān)鍵字在字典中是唯一的,每個(gè)關(guān)鍵字唯一地匹配一個(gè)值。 我們需要將若干個(gè)條目用一對(duì)花括號(hào)()括起來以創(chuàng)建一個(gè)字典。每一個(gè)條目由類似“關(guān)鍵字:對(duì)應(yīng)值”的結(jié)構(gòu)組成。條目之間使用逗號(hào)隔開。字典類型通過Python的內(nèi)置類dict來定義,因此使用dict函數(shù)也可以創(chuàng)建一個(gè)字典。字典的基本操作添加、修改、獲取、刪除添加、修改、獲取、刪除條目條目關(guān)鍵字在字典中的作用相當(dāng)于列表中的下標(biāo)。通過類似“字典對(duì)象名關(guān)鍵字”的語(yǔ)法可以讀或?qū)懽值渲械臈l目。要從字典中刪除一個(gè)條目,可使用del關(guān)鍵字進(jìn)行刪除。字典的遍歷字典的遍歷使用forin循環(huán)可以遍歷一個(gè)字典。需要注意的是,遍歷得到的是字典的關(guān)鍵字。字典的基本操作in/not in運(yùn)算符運(yùn)算符使用in或not in運(yùn)算符可以用來判斷一個(gè)關(guān)鍵字是否在字典中。 比較運(yùn)算符比較

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論