Python電子教案61組合數(shù)據(jù)類型_第1頁
Python電子教案61組合數(shù)據(jù)類型_第2頁
Python電子教案61組合數(shù)據(jù)類型_第3頁
Python電子教案61組合數(shù)據(jù)類型_第4頁
Python電子教案61組合數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python電子教案61組合數(shù)據(jù)類型Python電子教案61組合數(shù)據(jù)類型1組合數(shù)據(jù)類型概述組合數(shù)據(jù)類型概述2計算機不僅對單個變量表示的數(shù)據(jù)進行處理,更通常情況,計算機需要對一組數(shù)據(jù)進行批量處理。一些例子包括:給定一組單詞{python,data,function,list,loop},計算并輸出每個單詞的長度;給定一個學院學生信息,統(tǒng)計一下男女生比例;一次實驗產(chǎn)生了很多組數(shù)據(jù),對這些大量數(shù)據(jù)進行分析;序列類型計算機不僅對單個變量表示的數(shù)據(jù)進行處理,更通常情況,計算機需3

以單詞統(tǒng)計問題為例,在計算一個單詞長度之前,程序需要使用一個變量表示這個單詞,對于一組單詞,需要很多個變量。有兩個解決方案:為每個單詞分配一個變量,從變量命名上加以區(qū)分,例如:a01、a02分別存儲第一個、第二個元素;或者,采用一個數(shù)據(jù)結構存儲這組數(shù)據(jù),對每個元素采用索引加以區(qū)分,例如a表示這組元素,a[0]為該組第一個元素,a[1]為第二個元素。兩個方案哪個更好呢?顯然,第二個方案更好。假定單詞數(shù)量是500個而不是5個,使用第一種方法將是災難。此外,對每個元素單獨定義變量,不利于循環(huán)操作。序列類型以單詞統(tǒng)計問題為例,在計算一個單詞長度之前,程序需要使用4組合數(shù)據(jù)類型能夠將多個同類型或不同類型的數(shù)據(jù)組織起來,通過單一的表示使數(shù)據(jù)操作更有序更容易。根據(jù)數(shù)據(jù)之間的關系,組合數(shù)據(jù)類型可以分為三類:序列類型、集合類型和映射類型。序列類型是一個元素向量,元素之間存在先后關系,通過序號訪問,元素之間不排他。集合類型是一個元素集合,元素之間無序,相同元素在集合中唯一存在。映射類型是“鍵-值”數(shù)據(jù)項的組合,每個元素是一個鍵值對,表示為(key,value)。序列類型組合數(shù)據(jù)類型能夠將多個同類型或不同類型的數(shù)據(jù)組織起來,通過單5在Python中,每一類組合數(shù)據(jù)類型都對應一個或多個具體的數(shù)據(jù)類型,結合本書章節(jié)安排,組合數(shù)據(jù)類型的分類構成如圖6.1所示,其中加粗字體表示Python支持的具體數(shù)據(jù)類型。序列類型在Python中,每一類組合數(shù)據(jù)類型都對應一個或多個具體的數(shù)6序列類型是一維元素向量,元素之間存在先后關系,通過序號訪問。序列的基本思想和表示方法均來源于數(shù)學概念。在數(shù)學中,經(jīng)常給每個序列一個名字,例如,n個數(shù)的序列S,可以表示為:S=s0,s1,s2,….,sn-1當需要訪問序列中某個特定值時,只需要通過下標標出即可。例如,需要找到第2個元素,即可通過s2獲得。這種采用集合名字和下標相結合的表示方法可以簡潔地表示序列運算,例如,對上述序列S求和可以表示為:序列類型序列類型是一維元素向量,元素之間存在先后關系,通過序號訪問。7由于元素之間存在順序關系,所以序列中可以存在相同數(shù)值但位置不同的元素。序列類型支持成員關系操作符(in)、長度計算函數(shù)(len())、分片([]),元素本身也可以是序列類型。序列類型由于元素之間存在順序關系,所以序列中可以存在相同數(shù)值但位置不8Python語言中有很多數(shù)據(jù)類型都是序列類型,其中比較重要的是:str(字符串)、tuple(元組)和list(列表)。字符串(str)可以看成是單一字符的有序組合,屬于序列類型。同時,由于字符串類型十分常用且單一字符串只表達一個含義,也被看作是基本數(shù)據(jù)類型。元組是包含0個或多個數(shù)據(jù)項的不可變序列類型。元組生成后是固定的,其中任何數(shù)據(jù)項不能替換或刪除。列表則是一個可以修改數(shù)據(jù)項的序列類型,使用也最靈活序列類型Python語言中有很多數(shù)據(jù)類型都是序列類型,其中比較重要的9序列類型序列類型10序列類型有12個通用的操作符和函數(shù)序列類型操作符描述xins如果x是s的元素,返回True,否則返回Falsexnotins如果x不是s的元素,返回True,否則返回Falses+t連接s和ts*n或n*s將序列s復制n次s[i]索引,返回序列的第i個元素s[i:j]分片,返回包含序列s第i到j個元素的子序列(不包含第j個元素)s[i:j:k]步驟分片,返回包含序列s第i到j個元素以j為步數(shù)的子序列l(wèi)en(s)序列s的元素個數(shù)(長度)min(s)序列s中的最小元素max(s)序列s中的最大元素s.index(x[,i[,j]])序列s中從i開始到j位置中第一次出現(xiàn)元素x的位置s.count(x)序列s中出現(xiàn)x的總次數(shù)序列類型有12個通用的操作符和函數(shù)序列類型操作符描述xin11元組(tuple)是序列類型中比較特殊的類型,因為它一旦創(chuàng)建就不能被修改。元組類型在表達固定數(shù)據(jù)項、函數(shù)多返回值、多變量同步賦值、循環(huán)遍歷等情況下十分有用。Python中元組采用逗號和圓括號(可選)來表示,例子如下。序列類型元組(tuple)是序列類型中比較特殊的類型,因為它一旦創(chuàng)建12生成元組只需要使用逗號將元素隔離開即可,例如上例中的元組creature,也可以增加圓括號,但圓括號在不混淆語義的情況下不是必須的。

一個元組可以作為另一個元組的元素,可以采用多級索引獲取信息,例如元組color中包含了元組creature,可以用color[-1][2]獲取對應元素值。元組除了用于表達固定數(shù)據(jù)項外,還常用于如下3種情況:函數(shù)多返回值、多變量同步賦值、循環(huán)遍歷,例子如下序列類型生成元組只需要使用逗號將元素隔離開即可,例如上例中的元組cr13序列類型序列類型14集合類型與數(shù)學中集合的概念一致,即包含0個或多個數(shù)據(jù)項的無序組合。集合中元素不可重復,元素類型只能是固定數(shù)據(jù)類型,例如:整數(shù)、浮點數(shù)、字符串、元組等,列表、字典和集合類型本身都是可變數(shù)據(jù)類型,不能作為集合的元素出現(xiàn)。Python編譯器中界定固定數(shù)據(jù)類型與否主要考察類型是否能夠進行哈希運算。能夠進行哈希運算的類型,都可以作為集合元素。Python提供了一種同名的具體數(shù)據(jù)類型——集合(set)。集合類型集合類型與數(shù)學中集合的概念一致,即包含0個或多個數(shù)據(jù)項的無序15由于集合是無序組合,它沒有索引和位置的概念,不能分片,集合中元素可以動態(tài)增加或刪除。集合用大括號({})表示,可以用賦值語句生成一個集合,例子如下。集合類型由于集合是無序組合,它沒有索引和位置的概念,不能分片,集合中16從上例可以看到,由于集合元素是無序的,集合的打印效果與定義順序可以不一致。由于集合元素獨一無二,使用集合類型能夠過濾掉重復元素。set(x)函數(shù)可以用于生成集合,輸入的參數(shù)可以是任何組合數(shù)據(jù)類型,返回結果是一個無重復且排序任意的集合,例子如下。集合類型從上例可以看到,由于集合元素是無序的,集合的打印效果與定義順17集合類型有10個操作符集合類型操作符描述S–T或S.difference(T)返回一個新集合,包括在集合S中但不在集合T中的元素S-=T或S.difference_update(T)更新集合S,包括在集合S中但不在集合T中的元素S&T或S.intersection(T)返回一個新集合,包括同時在集合S和T中的元素S&=T或S.intersection_update(T)更新集合S,包括同時在集合S和T中的元素。S^T或s.symmetric_difference(T)返回一個新集合,包括集合S和T中元素,但不包括同時在其中的元素S=^T或s.symmetric_difference_update(T)更新集合S,包括集合S和T中元素,但不包括同時在其中的元素集合類型有10個操作符集合類型操作符描述S–T或S18集合類型有10個操作符集合類型操作符描述S|T或S.union(T)返回一個新集合,包括集合S和T中所有元素S=|T或S.update(T)更新集合S,包括集合S和T中所有元素S<=T或S.issubset(T)如果S與T相同或S是T的子集,返回True,否則返回False,可以用S<T判斷S是否是T的真子集S>=T或S.issuperset(T)如果S與T相同或S是T的超集,返回True,否則返回False,可以用S>T判斷S是否是T的真超集集合類型有10個操作符集合類型操作符描述S|T或S.uni19上述操作符表達了集合類型的4種基本操作,交集(&)、并集(|)、差集(-)、補集(^),操作邏輯與數(shù)學定義相同,集合類型上述操作符表達了集合類型的4種基本操作,交集(&)、并集(|20集合類型有10個操作函數(shù)或方法集合類型函數(shù)或方法描述S.add(x)如果數(shù)據(jù)項x不在集合S中,將x增加到sS.clear()移除S中所有數(shù)據(jù)項S.copy()返回集合S的一個拷貝S.pop()隨機返回集合S中的一個元素,如果S為空,產(chǎn)生KeyError異常S.discard(x)如果x在集合S中,移除該元素;如果x不在,不報錯集合類型有10個操作函數(shù)或方法集合類型函數(shù)或方法描述S.a21集合類型有10個操作函數(shù)或方法集合類型函數(shù)或方法描述S.remove(x)如果x在集合S中,移除該元素;不在產(chǎn)生KeyError異常S.isdisjoint(T)如果集合S與T沒有相同元素,返回Truelen(S)返回集合S元素個數(shù)xinS如果x是S的元素,返回True,否則返回FalsexnotinS如果x不是S的元素,返回True,否則返回False集合類型有10個操作函數(shù)或方法集合類型函數(shù)或方法描述S.r22集合類型主要用于三個場景:成員關系測試、元素去重和刪除數(shù)據(jù)項,例子如下。集合類型與其他類型最大的不同在于它不包含重復元素,因此,當需要對一維數(shù)據(jù)進行去重或進行數(shù)據(jù)重復處理時,一般通過集合來完成。集合類型集合類型主要用于三個場景:成員關系測試、元素去重和刪除數(shù)據(jù)項23映射類型是“鍵-值”數(shù)據(jù)項的組合,每個元素是一個鍵值對,即元素是(key,value),元素之間是無序的。鍵值對(key,value)是一種二元關系,源于屬性和值的映射關系,鍵(key)表示一個屬性,也可以理解為一個類別或項目,值(value)是屬性的內容,鍵值對刻畫了一個屬性和它的值。鍵值對將映射關系結構化,用于存儲和表達。在Python中,映射類型主要以字典(dict)體現(xiàn)映射類型映射類型24映射類型映射類型25列表類型和操作列表類型和操作26列表(list)是包含0個或多個對象引用的有序序列,屬于序列類型。與元組不同,列表的長度和內容都是可變的,可自由對列表中數(shù)據(jù)項進行增加、刪除或替換。列表沒有長度限制,元素類型可以不同,使用非常靈活。由于列表屬于序列類型,所以列表也支持成員關系操作符(in)、長度計算函數(shù)(len())、分片([])。列表可以同時使用正向遞增序號和反向遞減序號,可以采用標準的比較操作符(<、<=、==、!=、>=、>)進行比較,列表的比較實際上是單個數(shù)據(jù)項的逐個比較。列表類型的概念列表(list)是包含0個或多個對象引用的有序序列,屬于序列27列表用中括號([])表示,也可以通過list()函數(shù)將元組或字符串轉化成列表。直接使用list()函數(shù)會返回一個空列表,例子如下。列表類型的概念列表用中括號([])表示,也可以通過list()函數(shù)將元組或28與整數(shù)和字符串不同,列表要處理一組數(shù)據(jù),因此,列表必須通過顯式的數(shù)據(jù)賦值才能生成,簡單將一個列表賦值給另一個列表不會生成新的列表對象,例子如下。列表類型的概念與整數(shù)和字符串不同,列表要處理一組數(shù)據(jù),因此,列表必須通過顯29如上例所示,ls由實際數(shù)據(jù)賦值產(chǎn)生,為列表對象。將ls賦值給列表lt僅能產(chǎn)生對列表ls的一個新的引用,此時,lt和ls變量都是實際數(shù)據(jù)[425,"BIT",1024]的表示或引用,真實數(shù)據(jù)只存儲一份,因此,修改ls也同時修改了ls,這個關系如圖6.5所示。列表類型的概念如上例所示,ls由實際數(shù)據(jù)賦值產(chǎn)生,為列表對象。將ls賦值給30函數(shù)或方法描述ls[i]=x替換列表ls第i數(shù)據(jù)項為xls[i:j]=lt用列表lt替換列表ls中第i到j項數(shù)據(jù)(不含第j項,下同)ls[i:j:k]=lt用列表lt替換列表ls中第i到j以k為步的數(shù)據(jù)dells[i:j]刪除列表ls第i到j項數(shù)據(jù),等價于ls[i:j]=[]dells[i:j:k]刪除列表ls第i到j以k為步的數(shù)據(jù)列表是序列類型,因此,表6.1中12個序列類型的操作符和函數(shù)都可用于列表類型。由于列表是可變的,表6.4給出了列表類型額外的14個常用函數(shù)或方法。列表類型的操作函數(shù)或方法描述ls[i]=x替換列表ls第i數(shù)據(jù)項為xl31函數(shù)或方法描述ls+=lt或ls.extend(lt)將列表lt元素增加到列表ls中l(wèi)s*=n更新列表ls,其元素重復n次ls.append(x)在列表ls最后增加一個元素xls.clear()刪除ls中所有元素ls.copy()生成一個新列表,復制ls中所有元素ls.insert(i,x)在列表ls第i位置增加元素xls.pop(i)將列表ls中第i項元素取出并刪除該元素ls.remove(x)將列表中出現(xiàn)的第一個元素x刪除ls.reverse(x)列表ls中元素反轉列表類型的操作函數(shù)或方法描述ls+=lt或ls.extend(lt)將32上述操作符主要處理列表的增刪改等功能列表類型的操作上述操作符主要處理列表的增刪改等功能列表類型的操作33上述例子中,vlist[3]從整數(shù)變成了字符串,子序列vlist[1:3]被另一個列表賦值修改。需要注意,當使用一個列表改變另一個列表值時,Python不要求兩個列表長度一樣,但遵循“多增少減”的原則,例子如下。列表類型的操作上述例子中,vlist[3]從整數(shù)變成了字符串,子序列vli34

vlist[1:3]子序列包含2個元素,對其賦值時卻給了3個元素,Python接受這種方式,并不會報錯,vlist結果包含了賦值列表中的多余元素。同樣,當使用包含更少元素賦值列表時,原列表元素會相應減少??梢酝ㄟ^賦給更多或更少元素實現(xiàn)對列表元素的插入或刪除。與元組一樣,列表可以通過for…in語句對其元素進行遍歷,基本語法結構如下for <任意變量名>in<列表名>:語句塊

列表類型的操作vlist[1:3]子序列包含2個元素,對其賦值時卻給了335列表是一個十分靈活的數(shù)據(jù)結構,它具有處理任意長度、混合類型的能力,并提供了豐富的基礎操作符和方法。當程序需要使用組合數(shù)據(jù)類型管理批量數(shù)據(jù)時,請盡量使用列表類型。列表類型的操作列表是一個十分靈活的數(shù)據(jù)結構,它具有處理任意長度、混合類型的36基本統(tǒng)計值計算基本統(tǒng)計值計算37統(tǒng)計是計算科學、管理學、社會學、數(shù)學等諸多領域的基本問題,相關問題、方法和技術組成了一門學科,即“統(tǒng)計學”。Python的列表數(shù)據(jù)結構能夠支持基本的數(shù)據(jù)統(tǒng)計應用。本節(jié)以最簡單的統(tǒng)計問題為例,求解一組不定長數(shù)據(jù)的基本統(tǒng)計值,即平均值、標準差、中位數(shù)。一組數(shù)據(jù)表示為S=s0,s1,…,sn-1,其算術平均值、標準差分別表示為:和基本統(tǒng)計值的計算統(tǒng)計是計算科學、管理學、社會學、數(shù)學等諸多領域的基本問題,相38中位數(shù)指S中所有數(shù)按照從小到大(或者從大到小)順序排列后,處于最中間位置的數(shù)據(jù)值。如果n是奇數(shù),則序列S的最中間位置是一個數(shù)據(jù),可以表示為sn//2;如果n是偶數(shù),序列S不存在一個最中間位置,則中位數(shù)表示為最中間兩個位置數(shù)據(jù)的平均值,即(sn//2-1+sn//2)/2。例如:(5,2,1,3,4)的中位數(shù)是3,而(4,2,1,3)的中位數(shù)是(2+3)/2為2.5。這個問題的IPO描述如下:

輸入:從用戶輸入、文件、網(wǎng)絡等途徑獲取一組數(shù)據(jù);處理:適當?shù)臄?shù)據(jù)結構和算法輸出:平均值、標準差和中位數(shù)基本統(tǒng)計值的計算中位數(shù)指S中所有數(shù)按照從小到大(或者從大到?。╉樞蚺帕泻螅?9由于平均數(shù)、標準差和中位數(shù)是三個不同的計算目標,使用函數(shù)方式編寫計算程序。定義getNum()函數(shù)從用戶輸入獲得數(shù)據(jù),mean()函數(shù)計算平均值,dev()函數(shù)計算標準差,median()函數(shù)計算中位數(shù)。由于該問題不限制用戶輸入數(shù)據(jù)的最大個數(shù),所以,使用列表作為承載和存儲數(shù)據(jù)的數(shù)據(jù)類型。實例代碼9.1的全部代碼如下。基本統(tǒng)計值的計算由于平均數(shù)、標準差和中位數(shù)是三個不同的計算目標,使用函數(shù)方式40基本統(tǒng)計值的計算基本統(tǒng)計值的計算41基本統(tǒng)計值的計算基本統(tǒng)計值的計算42>>>

請輸入數(shù)字(直接輸入回車退出):99請輸入數(shù)字(直接輸入回車退出):98請輸入數(shù)字(直接輸入回車退出):97請輸入數(shù)字(直接輸入回車退出):96請輸入數(shù)字(直接輸入回車退出):95請輸入數(shù)字(直接輸入回車退出):平均值:97.0,方差:1.6,中位數(shù):97.該程序運行結果如

溫馨提示

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

評論

0/150

提交評論