Python編程基礎(chǔ) 課件 袁連海 第5-8章 組合數(shù)據(jù)類型 - Python計(jì)算生態(tài)_第1頁
Python編程基礎(chǔ) 課件 袁連海 第5-8章 組合數(shù)據(jù)類型 - Python計(jì)算生態(tài)_第2頁
Python編程基礎(chǔ) 課件 袁連海 第5-8章 組合數(shù)據(jù)類型 - Python計(jì)算生態(tài)_第3頁
Python編程基礎(chǔ) 課件 袁連海 第5-8章 組合數(shù)據(jù)類型 - Python計(jì)算生態(tài)_第4頁
Python編程基礎(chǔ) 課件 袁連海 第5-8章 組合數(shù)據(jù)類型 - Python計(jì)算生態(tài)_第5頁
已閱讀5頁,還剩295頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章

組合數(shù)據(jù)類型掌握熟悉掌握熟悉

學(xué)習(xí)目標(biāo)掌握列表的創(chuàng)建、索引、切片12掌握列表的操作符、操作函數(shù)和操作方法熟悉元組34熟悉字典的創(chuàng)建、操作符、操作函數(shù)和操作方法目錄頁5.1基本概念5.2列表5.3集合5.4字典5.5元組目錄頁5.1基本概念5.2列表5.3集合5.4字典5.5元組5.1組合數(shù)據(jù)類型基本概念Python的組合數(shù)據(jù)類型可分成三類:序列類型、集合類型和映射類型在序列類型中,又可以分為列表和元組,字符串也屬于序列類型在集合類型中,主要是集合,集合是一種無序的“序列”在映射類型中,主要有字典類型,字典也是一種無序的“序列”5.1組合數(shù)據(jù)類型基本概念序列包括字符串類型(str)、列表類型(list)和元組類型(tuple)。組合數(shù)據(jù)類型按照其中元素之間是否存在先后的位置關(guān)系分為:有序數(shù)據(jù)類型和無序數(shù)據(jù)類型有序類型包括字符串、列表和元組無序類型包括集合和字典有序類型可以支持索引(下標(biāo))訪問和切片訪問,無序類型不支持下標(biāo)訪問和切片訪問5.1組合數(shù)據(jù)類型基本概念可變類型包括序列、集合和字典不可變類型包括字符串和元組基本數(shù)據(jù)類型中數(shù)值類型也是不可變類型??勺冾愋椭С智衅ppend()、下標(biāo)引用賦值等元素賦值操作不可變類型不支持元素賦值。5.1組合數(shù)據(jù)類型基本概念表5-1序列通用操作操作符描

述x

in

s如果x是s的元素,返回True,否則返回Falsex

not

in

s如果x不是s的元素,返回True,否則返回Falses+t連接s和tx*n將序列s復(fù)制n次s[i]索引,返回序列的第i個(gè)元素s[i:j]切片,返回包含序列s的第i到j(luò)個(gè)元素的子序列(不包含第j個(gè)元素)s[i:j:k]步長切片,返回包含序列s的第i到j(luò)個(gè)元素的以k為步長的子序列l(wèi)en(s)序列s的元素個(gè)數(shù)min(s)序列s的最小元素max(x)序列s的最大元素s.index(x,i,j)序列s中從i開始到j(luò)位置中第一次出現(xiàn)元素x的位置s.count(x)序列s中出現(xiàn)x的總次數(shù)

5.1組合數(shù)據(jù)類型基本概念Python組合數(shù)據(jù)類型分類數(shù)據(jù)類型名稱序列類型字符串(str),是不可變序列列表(list),是可變序列,是任何對象的容器元組(tuple),是不可變序列集合類型集合(set)映射類型字典(dict)目錄頁5.1基本概念5.2列表5.3集合5.4字典5.5元組列表(list)是包含0個(gè)或多個(gè)對象的有序序列5.2列表列表中的值稱為元素(element),也稱為項(xiàng)(item)列表的長度和內(nèi)容是可變的,元素類型可以不同列表用一對方括號[]表示,所有元素包含在一對方括號中,每個(gè)元素使用逗號分隔列表可以沒有元素,即[]表示長度為0(也就是元素個(gè)數(shù)為0)的空列表要查看列表的方法,可以執(zhí)行dir(list)以雙下劃線開頭和結(jié)尾的方法,一般不直接使用執(zhí)行以下命令查看append方法help(list.append)5.2列表例如,下面這些都是列表:[] #長度為0(元素個(gè)數(shù)為0)的空列表[20,30,40] #元素都是數(shù)值類型["liping",456]#元素是字符串和數(shù)值類型[101,(20,"male"),"sichuan",[60,70,80]] #元素中包括數(shù)值類型、字符串和元組和列表類型列表屬于可變的序列類型,長度和內(nèi)容都可變列表的創(chuàng)建列表的創(chuàng)建和初始化可通過[]和list()函數(shù)完成。其格式:列表變量=[數(shù)據(jù)1,數(shù)據(jù)2,…]列表變量=list(變量名或?qū)ο髷?shù)據(jù))在[]列舉數(shù)據(jù)元素的方式創(chuàng)建并初始化一個(gè)列表變量lst1=[]和lst1=list()創(chuàng)建空列表list()函數(shù)可以利用字符串、元組、列表、集合、字典、range對象、其他類型的迭代對象數(shù)據(jù)創(chuàng)建并初始化另一個(gè)列表變量列表的創(chuàng)建>>>a=[]#創(chuàng)建空列表>>>a[]>>>type(a)<class'list'>>>>b=list()#創(chuàng)建空列表>>>b[]>>>type(b)<class'list'>>>>c=[12,1.3,(101,"liping"),[60,70,80]]>>>type(c)<class'list'>>>>d=list("abcdefg")#將字符串轉(zhuǎn)換為列表,list()可以將迭代對象轉(zhuǎn)換為列表。>>>d['a','b','c','d','e','f','g']>>>f=list(range(10))#將range對象轉(zhuǎn)換為列表>>>f[0,1,2,3,4,5,6,7,8,9]>>>list("abcdef")#將字符串轉(zhuǎn)換為列表['a','b','c','d','e','f']5.2列表5.2.2列表的索引和切片列表list1=[20,30.5,”dog”,(1,1),[1,2,3,4]]元素索引編號示意圖列表的下標(biāo)從0開始,因此,在引用索引的時(shí)候,不要超過范圍,否則會出現(xiàn)“IndexError:listindexoutofrange”錯(cuò)誤信息。列表切片(slicing)是Python中一個(gè)非常有用的操作,通過切片可以獲取列表中的一個(gè)子序列(即子列表)5.2.2列表的索引和切片列表切片的完整格式如下:my_list[start:stop:step]my_list是要進(jìn)行切片的列表,而start、stop和step是可選的參數(shù),它們分別表示切片的起始下標(biāo)、結(jié)束下標(biāo)和步長。

start:切片的起始下標(biāo)(包含)。如果省略,則默認(rèn)為0,即列表的開始。

stop:切片的結(jié)束下標(biāo)(不包含)。如果省略,則默認(rèn)為列表的長度,即列表的結(jié)束。

step:切片的步長。如果省略,則默認(rèn)為1。步長可以是負(fù)數(shù),表示從后往前切片。5.2.2列表的索引和切片5.2.2列表的索引和切片圖5-2

列表的切片列表切片的步驟如下:首先,將編程人員給出的負(fù)數(shù)的start和stop轉(zhuǎn)換成正數(shù),轉(zhuǎn)換方式是列表長度+start或stop,如-1轉(zhuǎn)換成列表長度-1,-2轉(zhuǎn)換成列表長度-2。接著為缺省的參數(shù)設(shè)為默認(rèn)值,step默認(rèn)為1,當(dāng)step>0時(shí),start默認(rèn)值為0,stop默認(rèn)值為列表長度;當(dāng)step<0時(shí),切片方向?yàn)閺挠蚁蜃?,起始下?biāo)為最右端的元素,也就是start的默認(rèn)值為列表長度-1,stop下標(biāo)的默認(rèn)值為-1,注意,這個(gè)-1不會被解釋器轉(zhuǎn)換為正數(shù),因?yàn)檫@個(gè)負(fù)數(shù)不是編程人員給的。5.2.2列表的索引和切片my_list=[0,1,2,3,4,5,6,7,8,9]print(my_list[1:4])#輸出:[1,2,3]從下標(biāo)1開始直到下標(biāo)4(不包含4)print(my_list[2:])#輸出:[2,3,4,5,6,7,8,9]從下標(biāo)2開始直到下標(biāo)10(默認(rèn))print(my_list[:5])#輸出:[0,1,2,3,4]從下標(biāo)0開始直到下標(biāo)5(不包含5)

print(my_list[::-1])#輸出:[9,8,7,6,5,4,3,2,1,0](反轉(zhuǎn)列表)print(my_list[1:10:2])#輸出:[1,3,5,7,9](步長為2)print(my_list[::-2])#輸出:[9,7,5,3,1](從后往前,步長為-2)5.2.2列表的索引和切片元組和字符串都可以索引和切片,方法同列表一樣>>>nums=[1,2,3,4,5,6,7,8,9]>>>nums[:]#相當(dāng)于nums[0:9:1][1,2,3,4,5,6,7,8,9]>>>nums[0:4]#相當(dāng)于nums[0:4:1][1,2,3,4]>>>nums[3:]#相當(dāng)于nums[3:9:1][4,5,6,7,8,9]>>>nums[:7]#相當(dāng)于nums[0:7:1][1,2,3,4,5,6,7]>>>nums[::2]#相當(dāng)于nums[0:9:2][1,3,5,7,9]>>>nums[0:8:3][1,4,7]5.2.2列表的索引和切片#結(jié)合反向索引的切片>>>nums[::-1]#相當(dāng)于nums[8:-1:-1]注意這里的stop為-1不用去轉(zhuǎn)換為正[9,8,7,6,5,4,3,2,1]>>>nums[:-2]#相當(dāng)于nums[0:7:1]注意這里的stop為給出的-2,轉(zhuǎn)換為列表長度9-2[1,2,3,4,5,6,7]>>>nums[1:-2]#相當(dāng)于nums[1:7:1]stop同上。[2,3,4,5,6,7]>>>nums[-5:]#相當(dāng)于nums[4:9:1]start是編程人員給出的-5,轉(zhuǎn)換為正9-5=4[5,6,7,8,9]>>>nums[-3:-2]#nums[6:7:1][7]>>>nums[-3::-2]#step<0,start編程人員給的-3,轉(zhuǎn)換為9-3=6,默認(rèn)stop=-1[7,5,3,1]>>>nums[-3:0:-2]#step<0,start編程人員給的-3,轉(zhuǎn)換為9-3=6,stop=0[7,5,3]>>>nums[-3:-1:-2]#相當(dāng)于nums[6:8:-2][]5.2.2列表的索引和切片5.2.3列表的操作符、操作函數(shù)和方法表5-3

列表基本操作符操作符描

述xins檢查元素x是否在列表中,返回True或者Falsexnotins檢查元素x是否不在列表中,返回True或者Falses+t連接兩個(gè)列表s和ts*n將列表s復(fù)制n次s[i]索引列表s的第i個(gè)元素s[i:j:k]列表切片,返回列表s中第i到j(luò)以k為步長的元素s[i]=x替換列表s第i個(gè)元素為x5.2列表表5-4

列表基本操作函數(shù)操作函數(shù)描

述list(s)將某個(gè)序列轉(zhuǎn)換為列表len(s)返回列表s的長度id(s)獲取列表對象s的內(nèi)存地址min(s)返回列表s的最小元素,元素需要可比較max(s)返回列表s的最大元素,元素需要可比較dels[i]刪除列表s中第i個(gè)元素dels[i:j:k]刪除列表s中從i到j(luò)位置以k步進(jìn)切片的元素s.index(x)返回列表s第一次出現(xiàn)x的位置s.index(x,i,j)返回列表s從i到j(luò)位置中第一次出現(xiàn)x的位置s.count(x)返回列表s中出現(xiàn)x的總次數(shù)5.2列表表5-5

列表基本內(nèi)置方法方法描

述s.append(x)在列表s最后增加元素xs.extend(a)將列表a擴(kuò)展到列表s中s.insert(i,x)在列表s的第i個(gè)位置增加元素xs.clear()刪除列表s中所有元素,s變?yōu)榭樟斜韘.pop(i)將列表s中第i位置元素取出并刪除該元素,缺省下取最后一個(gè)元素s.remove(x)將列表s中出現(xiàn)的第一個(gè)x刪除s.copy()生成一個(gè)新列表,復(fù)制s中的所有元素s.reserve()列表s中的元素反轉(zhuǎn)list.sort(key=None,reverse=False)

對關(guān)鍵字key進(jìn)行升序或者降序排序,reverse

=

True為降序,reverse

=

False

為升序(默認(rèn))>>>s=[]>>>s.append(1)>>>s[1]>>>a=[2,3,4,5]>>>s.extend(a)>>>s[1,2,3,4,5]>>>s.clear()>>>s[]>>>s=a>>>s[2,3,4,5]>>>s.insert(1,1)>>>s[2,1,3,4,5]>>>b=s.pop()>>>b5>>>s[2,1,3,4]>>>s.insert(0,1)>>>s[1,2,1,3,4]>>>s.remove(1)>>>s[2,1,3,4]>>>s.remove(1)>>>s[2,3,4]>>>s.reverse()>>>s[4,3,2]>>>c=reversed(s)>>>c<list_reverseiteratorobjectat0x041A00F0>>>>s[4,3,2]>>>list(c)[2,3,4]>>>>>>s=[1,2,3,4,5]>>>dels[1:4:2]>>>s[1,3,5]【例5-1】有一個(gè)列表a,編寫程序刪除列表中的素?cái)?shù),下列代碼是有問題的代碼。a=[3,5,20,8,61,9,11]forxina:#此處代碼有bug,要正確運(yùn)行程序,需要修改forxina.copy():flag=Trueifx>1:foriinrange(2,x):if(x%i)==0:flag=Falsebreakif(flag==True):a.remove(x)print(a)程序運(yùn)行結(jié)果:[5,20,8,9]>>>[5,20,8,9]>>>從程序的運(yùn)行結(jié)果可以看到,列表中的素?cái)?shù)5并沒有被刪掉,程序問題出在哪里呢?原因是當(dāng)3刪掉后,5直接移到前面第0個(gè)位置,此時(shí)x指向第一個(gè)位置元素,即20,因此,這時(shí)判斷20是否為素?cái)?shù),而不會判斷5是否是素?cái)?shù)。要讓例題中代碼正常運(yùn)行,可以把forxina:改為forxina.copy():,此時(shí)運(yùn)行結(jié)果正常。

for變量in列表:語句例如,使用循環(huán)遍歷把社會主義核心價(jià)值觀一個(gè)一個(gè)打印出來。>>>values=['富強(qiáng)','民主','文明','和諧','自由','平等','公正','法治','愛國','敬業(yè)','誠信','友善']>>>forxinvalues: print(x,end="")運(yùn)行結(jié)果:富強(qiáng)

民主

文明

和諧

自由

平等

公正

法治

愛國

敬業(yè)

誠信

友善

>>>enumerate(列表)是枚舉列表元素,返回枚舉對象,其中每個(gè)元素為包含下標(biāo)和值的元組>>>color=["紅","橙","黃","綠"]>>>list(enumerate(color))[(0,'紅'),(1,'橙'),(2,'黃'),(3,'綠')]列表的遍歷是指一次性、不重復(fù)地訪問列表的所有元素【例5-2】從鍵盤輸入一個(gè)列表,統(tǒng)計(jì)各個(gè)元素在列表中的出現(xiàn)次數(shù)。a=eval(input())s=[]forxina:ifxnotins:s.append(x)forxins:n=a.count(x)print(x,"出現(xiàn)的次數(shù)為:",n)程序運(yùn)行結(jié)果:[1,2,3,1,2,3,4,2,3,4,2,1,2]1出現(xiàn)的次數(shù)為:32出現(xiàn)的次數(shù)為:53出現(xiàn)的次數(shù)為:34出現(xiàn)的次數(shù)為:2>>>【例5-3】a和b是兩個(gè)列表變量,列表a為[3,6,9]已給定,鍵盤輸入列表b,計(jì)算a中元素與b中對應(yīng)元素乘積的累加和。例如:鍵盤輸入列表b為[1,2,3],累加和為1*3+2*6+3*9=42,因此,屏幕輸出計(jì)算結(jié)果為42。a=[3,6,9]b=eval(input(""))#輸入[1,2,3]s=0foriinrange(len(a)):s+=a[i]*b[i];print(s)程序運(yùn)行結(jié)果:[1,2,3]42【例5-4】編寫一個(gè)小小的通信錄程序。要求如下:(1) 使用列表存儲聯(lián)系人。(2) 能根據(jù)用戶輸入添加聯(lián)系人。(3) 能根據(jù)輸入的人名刪除聯(lián)系人。(4) 能顯示所有聯(lián)系人。

persons=[]#聯(lián)系人列表s='''*************************************1.添加聯(lián)系人2.刪除聯(lián)系人3.顯示所有聯(lián)系人4.退出**************************************'''defmenu():print(s)whileTrue:menu()n=eval(input("請輸入數(shù)字選項(xiàng)(1-4):"))ifn==4:breakelifn==1:p=input("請輸入聯(lián)系人:")persons.append(p)elifn==2:p=input("請輸入要刪除的聯(lián)系人:")ifpinpersons:persons.remove(p)else:print("沒有聯(lián)系人:",p)elifn==3:print(persons)else:print("選項(xiàng)有誤,請重新輸入")目錄頁5.1基本概念5.2列表5.3集合5.4字典5.5元組集合是多個(gè)元素的無序組合,每個(gè)元素唯一,不存在相同元素集合是無序的集合中不允許有相同的數(shù)據(jù)項(xiàng)可以使用大括號{}或者set()函數(shù)創(chuàng)建集合,用set()創(chuàng)建集合,也可以把字符串、列表或元組轉(zhuǎn)換為集合注意:創(chuàng)建一個(gè)空集合必須用set()而不是{},因?yàn)閧}是用來創(chuàng)建一個(gè)空字典。5.3集合集合是多個(gè)元素的無序組合,每個(gè)元素唯一,不存在相同元素集合是無序的集合中不允許有相同的數(shù)據(jù)項(xiàng)可以使用大括號{}或者set()函數(shù)創(chuàng)建集合,用set()創(chuàng)建集合,也可以把字符串、列表或元組轉(zhuǎn)換為集合注意:創(chuàng)建一個(gè)空集合必須用set()而不是{},因?yàn)閧}是用來創(chuàng)建一個(gè)空字典。5.3集合如果創(chuàng)建的時(shí)候有重復(fù)元素,集合會自動去重,例如:set1={1,2,4,3,3,4,4,3,3,2,2,2,2,1},得到的set1是{1,2,3,4}集合元素只能是整數(shù)、實(shí)數(shù)、字符串、元組和凍結(jié)集合,不能是可變的列表、可變集合和字典。集合在打印的時(shí)候,是無序的5.3集合5.3集合表5-6

集合基本操作符操作符描

述s|t返回一個(gè)新集合,包括在集合s和t中的所有元素s-t返回一個(gè)新集合,包括在集合s但不在t中的元素s&t返回一個(gè)新集合,包括同時(shí)在集合s和t中的元素s^t返回一個(gè)新集合,包括集合s和t中的非相同元素s<=tors<t返回True/False,判斷集合s和t的子集關(guān)系s<=tors<t返回True/False,判斷集合s和t的包含關(guān)系xins返回True/False,判斷元素x是否在集合s中xnotins返回True/False,判斷元素x是否不在集合s中5.3集合表5-7

集合基本操作函數(shù)操作函數(shù)描

述set(s)將某個(gè)序列轉(zhuǎn)換為集合len(s)返回集合s的長度id(s)獲取集合對象s的內(nèi)存地址min(s)返回集合s的最小元素,元素需要可比較max(s)返回集合s的最大元素,元素需要可比較5.3集合表5-8

集合基本內(nèi)置方法方法描

述s.add(x)如果x不在集合s中,將x增加到集合ss.discard(x)移除集合s中元素x,如果x不在集合s中,不報(bào)錯(cuò)s.clear()刪除集合s中所有元素s.copy()生成集合s的一個(gè)拷貝s.pop()隨機(jī)返回集合s中的一個(gè)元素,更新s,若s為空產(chǎn)生KeyError異常s.remove(x)將集合s中的x刪除s.update(x)添加元素x,可以是列表,元組,字典等s.difference()返回多個(gè)集合的差集s.difference_update()移除集合中的元素,該元素在指定的集合也存在ersection()返回集合的交集s.inersection_update()返回集合的交集s.union()返回兩個(gè)集合的并集對于一個(gè)學(xué)生的期末成績,數(shù)據(jù)庫原理:60,計(jì)算機(jī)操作系統(tǒng):80,大數(shù)據(jù)技術(shù):90,人工智能基礎(chǔ):70??梢杂靡唤M列表表示課程,再用另一組列表表示成績。但是這樣,就硬生生把一個(gè)學(xué)生的成績分成了兩部分,通過創(chuàng)建字典就可以解決上述問題。5.4字典創(chuàng)建字典dict1={'數(shù)據(jù)庫原理':60,'計(jì)算機(jī)操作系統(tǒng)':80,'大數(shù)據(jù)技術(shù)':90,”人工智能基礎(chǔ)”:70},課程為鍵(key),成績?yōu)橹担╲alue),每一鍵值對(key-valuepair)叫做項(xiàng)(item),該字典共3項(xiàng)(item)。5.4字典5.4字典在編程中,通過“鍵”查找“值”的過程稱為映射字典是Python中典型的映射類型數(shù)據(jù)結(jié)構(gòu)字典的每個(gè)鍵值對用冒號分割,每個(gè)鍵值對之間用逗號分割,整個(gè)字典包括在花括號{}中,鍵是數(shù)據(jù)索引的擴(kuò)展,字典是鍵值對的集合,鍵值對之間無序。5.4字典字典形式如下:d={key1:value2,key2:value2,…<keyn>:<valuen>}鍵和值之間用冒號:分隔,形如key:value。字典是通過大括號來表示{},鍵和值以冒號連接,不同鍵值對通過逗號連接。大括號也可以創(chuàng)建一個(gè)空的字典,可以通過中括號向其增加內(nèi)容。例如:dict1={},dict1[‘a(chǎn)’]=1,dict1[‘b’]=2得到的dict1為{‘a(chǎn)’:1,‘b’:2}。5.4字典也可以使用內(nèi)建函數(shù)dict()來創(chuàng)建字典,例如:dict2=dict()??梢灾苯邮褂面I值對創(chuàng)建一個(gè)新字典,例如:tinydict={'name':'runoob','likes':123,'url':''},創(chuàng)建好的字典鍵值對如圖5-4所示。5.4字典5.4字典列表不能作為字典的鍵,而元組、字符串等都可以作為字典的鍵。字典的值可以相同,值可以是任何數(shù)據(jù)類型。要判斷一個(gè)對象是否是可hash的,可以用hash函數(shù),例如:>>>hash("name")-314078753>>>hash([1,2,3])Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>hash([1,2,3])TypeError:unhashabletype:'list'>>>5.4字典下列代碼演示字典創(chuàng)建方法。>>>d1={}##創(chuàng)建一個(gè)空字典>>>d2={"數(shù)據(jù)結(jié)構(gòu)":80,"操作系統(tǒng)":90}#創(chuàng)建有鍵值對的字典>>>d3=dict(數(shù)據(jù)結(jié)構(gòu)=80,操作系統(tǒng)=90)>>>keys=[1,2,3,4]>>>values=['a','b','c','d']>>>d4=dict(zip(keys,values))#zip函數(shù)將兩個(gè)列表打包為字典>>>d4{1:'a',2:'b',3:'c',4:'d'}>>>d3{'數(shù)據(jù)結(jié)構(gòu)':80,'操作系統(tǒng)':90}>>>d2{'數(shù)據(jù)結(jié)構(gòu)':80,'操作系統(tǒng)':90}5.4字典>>>s1=[('操作系統(tǒng)',90),('數(shù)據(jù)庫原理',85)]>>>s1[('操作系統(tǒng)',90),('數(shù)據(jù)庫原理',85)]>>>s2=dict(s1)>>>s2{'數(shù)據(jù)庫原理':85,'操作系統(tǒng)':90}>>>s3=[['操作系統(tǒng)',90],['數(shù)據(jù)庫原理',85]]>>>s4=dict(s3)>>>s4{'數(shù)據(jù)庫原理':85,'操作系統(tǒng)':90}>>>5.4字典字典值的查找可以通過中括號訪問,以字典變量[鍵]的方式,以鍵作為下標(biāo)可以讀取字典元素,若鍵不存在則拋出異常。也可以用字典對象.get(<key>,<default>)方法查找值,如果key存在則返回相應(yīng)的值,否則返回默認(rèn)值,default可以省略,如果省略則默認(rèn)值為空。5.4.2字典元素的訪問與修改字典的訪問把相應(yīng)的鍵放入到方括號中,既可得到對應(yīng)的值向字典添加新內(nèi)容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對例如:tinydict['Age']=8,會修改鍵’Age’的值為8,tinydict['School']="大數(shù)據(jù)",則會增加一個(gè)鍵值對。使用“字典變量[鍵]”的形式可以查找字典中與“鍵”對應(yīng)的值;使用賦值運(yùn)算符可以動態(tài)修改字典中的值。5.4字典可以利用內(nèi)建函數(shù)刪除一個(gè)鍵,例如:deltinydict['Name'],清空字典可以利用方法tinydict.clear(),刪除整個(gè)字典也可以使用deltinydict。字典值可以是任何的Python對象,既可以是標(biāo)準(zhǔn)的對象,也可以是用戶定義的創(chuàng)建一個(gè)字典d后,可以獲取字典信息,<d>.keys()方法獲取所有鍵信息,<d>.values() 獲取所有值信息,<d>.items() 獲取所有鍵值對信息。5.4字典>>>person={'A':'123','B':'135','C':'680'}>>>person.items()dict_items([('A','123'),('C','680'),('B','135')])>>>person.keys()dict_keys(['A','C','B'])>>>person.values()dict_values(['123','680','135'])>>>person['B']'135'>>>person['A']="888">>>person{'A':'888','B':'135','C':'680'}5.4字典>>>person['D']="9999"#通過操作鍵增加字典元素>>>person{'A':'888','D':'9999','B':'135','C':'680'}>>>5.4字典5.4.3字典的操作符、操作函數(shù)和方法表5-9

字典基本操作符操作符描

述xins返回True/False,判斷鍵x是否在字典s中xnotins返回True/False,判斷鍵x是否不在字典s中

5.4字典表5-10

字典基本操作函數(shù)操作函數(shù)描

述dict(s)將某個(gè)序列轉(zhuǎn)換為字典len(s)返回字典s的長度id(s)獲取字典對象s的內(nèi)存地址str(s)輸出字典為可以打印的字串符5.4字典表5-12

字典基本內(nèi)置方法方法描

述s.clear()刪除字典s中所有元素s.copy()生成字典s的一個(gè)拷貝s.fromkeys(l,v)創(chuàng)建一個(gè)新字典,以序列l(wèi)中元素做字典的鍵,v為鍵對應(yīng)的值s.items()返回字典s中所有的鍵值對信息s.keys()返回字典s中所有的鍵信息s.values()返回字典s中所有的值信息s.get(k,<default>)鍵k存在,則返回相應(yīng)值,不存在則返回<default>值s.pop(k,<default>)鍵k存在,則取出相應(yīng)值,不存在則返回<default>值s.popitem()隨機(jī)從字典k中取出一個(gè)鍵值對,以元組形式返回s.setdefault(k,<default>)和get類似,如果k不存在,將會添加鍵k并初始化為defaults.update(dict)把字典dict的鍵/值對更新到字典s里

5.4字典表5-10

字典基本操作函數(shù)操作函數(shù)描

述dict(s)將某個(gè)序列轉(zhuǎn)換為字典len(s)返回字典s的長度id(s)獲取字典對象s的內(nèi)存地址str(s)輸出字典為可以打印的字串符5.4字典表5-10

字典基本操作函數(shù)操作函數(shù)描

述dict(s)將某個(gè)序列轉(zhuǎn)換為字典len(s)返回字典s的長度id(s)獲取字典對象s的內(nèi)存地址str(s)輸出字典為可以打印的字串符5.4字典表5-10

字典基本操作函數(shù)操作函數(shù)描

述dict(s)將某個(gè)序列轉(zhuǎn)換為字典len(s)返回字典s的長度id(s)獲取字典對象s的內(nèi)存地址str(s)輸出字典為可以打印的字串符5.4字典表5-10

字典基本操作函數(shù)操作函數(shù)描

述dict(s)將某個(gè)序列轉(zhuǎn)換為字典len(s)返回字典s的長度id(s)獲取字典對象s的內(nèi)存地址str(s)輸出字典為可以打印的字串符#清除字典中所有的元素>>>dic1={"k1":11,"k2":22,"k3":"hello","k4":"world"}#創(chuàng)建字典>>>print(dic1){'k3':'hello','k4':'world','k2':22,'k1':11}>>>dic1.clear()>>>print(dic1){}

#淺復(fù)制>>>dic1={"k1":11,"k2":22,"k3":"hello","k4":"world"}>>>id(dic1)1403004550005845.4字典>>>person={'A':'123','B':'135','C':'680'}>>>person.items()dict_items([('A','123'),('C','680'),('B','135')])>>>person.keys()dict_keys(['A','C','B'])>>>person.values()dict_values(['123','680','135'])>>>person['B']'135'>>>person['A']="888">>>person{'A':'888','B':'135','C':'680'}5.4字典>>>dic2=dic1.copy()>>>id(dic2)140300455000648>>>print(dic2){'k2':22,'k4':'world','k3':'hello','k1':11}#返回一個(gè)以迭代器中的每一個(gè)元素做健,值為None的字典>>>dic1={"k1":11,"k2":"hello"}>>>dic1.fromkeys([22,33,44,55]){33:None,44:None,22:None,55:None}>>>print(dic1){'k2':'hello','k1':11}5.4字典#查詢某個(gè)元素是否在字典中,即使不存在也不會報(bào)錯(cuò)>>>dic1={'k3':None,'k2':'hello','k1':11,'k4':'world'}>>>dic1.get("k3")>>>value1=dic1.get("k1")>>>print(value1)11>>>value2=dic1.get("k2")>>>print(value2)hello5.4字典>>>value3=dic1.get("k5")>>>print(value3)None#返回一個(gè)由每個(gè)鍵及對應(yīng)的值構(gòu)成的元組組成的列表>>>dic1={"k1":11,"k2":22,"k3":"hello","k4":"world"}>>>dic1.items()dict_items([('k3','hello'),('k4','world'),('k2',22),('k1',11)])>>>type(dic1.items())<class'dict_items'>#返回一個(gè)由字典所有的鍵構(gòu)成的列表>>>dic1={"k1":11,"k2":22,"k3":"hello","k4":"world"}>>>dic1.keys()['k3','k2','k1','k4']5.4字典#從字典中移除指定的鍵,返回這個(gè)鍵對應(yīng)的值,如果鍵不存在則報(bào)錯(cuò)>>>dic1={"k1":11,"k2":22}>>>dic1.pop("k1")11>>>dic1.pop("k2")22#從字典中移除一個(gè)鍵值對,并返回一個(gè)由所移除的鍵和值構(gòu)成的元組,字典為空時(shí),會報(bào)錯(cuò)>>>dic1={"k1":11,"k2":22}5.4字典>>>dic1.popitem()('k2',22)>>>dic1.popitem()('k1',11)>>>dic1.popitem()Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>KeyError:'popitem():dictionaryisempty'#參數(shù)只有一個(gè)時(shí),字典會增加一個(gè)鍵值對,鍵為這個(gè)參數(shù),值默認(rèn)為None;后接兩個(gè)參數(shù)時(shí),第一個(gè)參數(shù)為字典新增的鍵,第二個(gè)參數(shù)為新增的鍵對應(yīng)的值>>>dic1={"k1":11,"k2":"hello"}>>>dic1.setdefault("k3")5.4字典>>>print(dic1){'k3':None,'k2':'hello','k1':11}>>>dic1.setdefault("k4","world")'world'>>>print(dic1){'k3':None,'k2':'hello','k1':11,'k4':'world'}#把一個(gè)字典參數(shù)合并入另一個(gè)字典,當(dāng)兩個(gè)字典的鍵有重復(fù)時(shí),參數(shù)字典的鍵值會覆蓋原始字典的鍵值>>>dic1={"k1":11,"k2":"hello"}>>>dic2={"k3":22,"k4":"world"}>>>dic1.update(dic2)>>>print(dic1){'k3':22,'k2':'hello','k1':11,'k4':'world'}5.4字典>>>dic1={"k1":11,"k2":"hello"}>>>dic2={"k1":22,"k4":"world"}>>>dic1.update(dic2)>>>print(dic1){'k2':'hello','k1':22,'k4':'world'}#返回一個(gè)由字典的所有的值構(gòu)成的列表>>>dic1={"k1":11,"k2":22,"k3":"hello","k4":"world"}>>>dic1.values()['hello',22,11,'world']5.4字典【例5-5】從鍵盤上輸入一串英文字符串,統(tǒng)計(jì)每個(gè)字母出現(xiàn)的次數(shù),并將出現(xiàn)次數(shù)最多的前三個(gè)字符以及次數(shù)輸出,這里使用字典實(shí)現(xiàn)。s=input("請輸入英文字符串:")dict1={}forkeyins:dict1[key]=dict1.get(key,0)+1items=list(dict1.items())items.sort(key=lambdax:x[1],reverse=True)foriinrange(3):ch,count=items[i]print("{}出現(xiàn)的次數(shù):{}".format(key,count))5.4字典元組是序列類型的一種擴(kuò)展,一旦創(chuàng)建不能被修改創(chuàng)建元組可以使用小括號()直接創(chuàng)建,例如:tup1

=

('Google',

'Runoob',

1997,

2000),直接創(chuàng)建需要在括號中添加元素,并使用逗號隔開即可,也可以不加小括號創(chuàng)建元組,例如:tup2

=

"a",

"b",

"c",

"d"。還可以使用內(nèi)置函數(shù)tuple()創(chuàng)建,

例如:tup3=tuple()。5.5元組元組看成是不可以修改的列表,因此元組的索引和列表類似,元組中元素按照先后順序形成從0開始的索引號。由于元組元素不能改變,所以,不要想通過索引修改元組元素。元組也是一個(gè)序列,可以訪問元組中的指定范圍的元素可以像列表一樣進(jìn)行切片得到一段元素,元組其它的切片方式與列表類似5.5元組5.5元組表5-11

元組基本操作符操作符描

述xins檢查元素x是否在元組中,返回True或者Falsexnotins檢查元素x是否不在元組中,返回True或者Falses+t連接兩個(gè)元組s和ts*n將元組s復(fù)制n次s[i]索引元組s的第i個(gè)元素s[i:j:k]元組切片,返回列表s中第i到j(luò)以k為步長的元素5.5元組表5-12

元組基本操作函數(shù)操作函數(shù)描

述tuple(s)將某個(gè)序列轉(zhuǎn)換為元組len(s)返回元組s的長度id(s)獲取元組對象s的內(nèi)存地址min(s)返回元組s的最小元素,元素需要可比較max(s)返回元組s的最大元素,元素需要可比較dels刪除元組s5.5元組表5-13

元組基本內(nèi)置方法方法描

述s.index(x)返回元組s第一次出現(xiàn)x的位置s.index(x,i,j)返回元組s從i到j(luò)位置中第一次出現(xiàn)x的位置s.count(x)返回元組s中出現(xiàn)x的總次數(shù)#返回某個(gè)元素在元組中出現(xiàn)的次數(shù)>>>t1=("hello","world",1,2,3,"linux",1,2,3)>>>t1.count(1)2>>>t1.count(3)2>>>t1.count("hello")1#返回元素在元組中出現(xiàn)的第一個(gè)索引的值,元素不存在則報(bào)錯(cuò)>>>t1=("hello","world",1,2,3,"linux")>>>t1=("hello","world",1,2,3,"linux",1,2,3)>>>t1.count("hello")1>>>t1.index("linux")5>>>t1.index(3)45.5元組#元組的索引和切片>>>

tup

=

('Google',

'Runoob',

'Taobao',

'Wiki',

'Weibo','Weixin')>>>

tup[1]'Runoob'>>>

tup[-2]'Weibo'>>>

tup[1:]('Runoob',

'Taobao',

'Wiki',

'Weibo',

'Weixin')>>>

tup[1:4]('Runoob',

'Taobao',

'Wiki')5.5元組/course-ans/courseportal/238244938.htmlThankYou!第6章文件和數(shù)據(jù)格式化·文件概述·文件的操作·數(shù)據(jù)格式化·數(shù)據(jù)序列化6.1文件概述6.1文件概述文件標(biāo)識文件標(biāo)識的意義:找到計(jì)算機(jī)中唯一確定的文件。文件標(biāo)識的組成:文件路徑、文件名主干、文件擴(kuò)展名。操作系統(tǒng)以文件為單位對數(shù)據(jù)進(jìn)行管理。6.1文件概述文件類型根據(jù)數(shù)據(jù)的邏輯存儲結(jié)構(gòu),人們將計(jì)算機(jī)中的文件分為文本文件和二進(jìn)制文件。文本文件:專門存儲文本字符數(shù)據(jù)。二進(jìn)制文件:不能直接使用文字處理程序正常讀寫,必須先了解其結(jié)構(gòu)和序列化規(guī)則,再設(shè)計(jì)正確的反序列化規(guī)則,才能正確獲取文件信息。二進(jìn)制文件和文本文件這兩種類型的劃分基于數(shù)據(jù)邏輯存儲結(jié)構(gòu)而非物理存儲結(jié)構(gòu),計(jì)算機(jī)中的數(shù)據(jù)在物理層面都以二進(jìn)制形式存儲。多學(xué)一招:標(biāo)準(zhǔn)文件標(biāo)準(zhǔn)文件Python的sys模塊中定義了3個(gè)標(biāo)準(zhǔn)文件,分別為:stdin(標(biāo)準(zhǔn)輸入文件)。標(biāo)準(zhǔn)輸入文件對應(yīng)輸入設(shè)備,如鍵盤。stdout(標(biāo)準(zhǔn)輸出文件)。stderr(標(biāo)準(zhǔn)錯(cuò)誤文件)。標(biāo)準(zhǔn)輸出文件和標(biāo)準(zhǔn)錯(cuò)誤文件對應(yīng)輸出設(shè)備,如顯示器。在解釋器中導(dǎo)入sys模塊后,便可對標(biāo)準(zhǔn)文件進(jìn)行操作。多學(xué)一招:標(biāo)準(zhǔn)文件標(biāo)準(zhǔn)文件importsysfile=sys.stdoutfile.write("hello")示例6.2文件的操作6.2文件的操作文件的打開、關(guān)閉與讀寫是文件的基礎(chǔ)操作,任何更復(fù)雜的文件操作都離不開這些操作。6.2.1文件的打開與關(guān)閉1.打開文件內(nèi)置函數(shù)open()用于打開文件,該方法的聲明如下:open(file,mode='r',buffering=-1)file:文件的路徑。mode:設(shè)置文件的打開模式,取值有r、w、a。buffering:設(shè)置訪問文件的緩沖方式。取值為0或1?!緟?shù)】r:以只讀方式打開文件(mode參數(shù)的默認(rèn)值)。w:以只寫方式打開文件。a:以追加方式打開文件。b:以二進(jìn)制形式打開文件。+:以更新的方式打開文件(可讀可寫)6.2.1文件的打開與關(guān)閉1.打開文件打開模式名稱描述r/rb只讀模式以只讀的形式打開文本文件/二進(jìn)制文件,若文件不存在或無法找到,文件打開失敗w/wb只寫模式以只寫的形式打開文本文件/二進(jìn)制文件,若文件已存在,則重寫文件,否則創(chuàng)建新文件a/ab追加模式以只寫的形式打開文本文件/二進(jìn)制文件,只允許在該文件末尾追加數(shù)據(jù),若文件不存在,則創(chuàng)建新文件r+/rb+讀取(更新)模式以讀/寫的形式打開文本文件/二進(jìn)制文件,若文件不存在,文件打開失敗

w+/wb+寫入(更新)模式以讀/寫的形式打開文本文件/二進(jìn)制文件,若文件已存在,則重寫文件a+/ab+追加(更新)模式以讀/寫的形式打開文本/二進(jìn)制文件,只允許在文件末尾添加數(shù)據(jù),若文件不存在,則創(chuàng)建新文件6.2.1文件的打開與關(guān)閉1.打開文件內(nèi)置函數(shù)open()用于打開文件,該方法的聲明如下:open(file,mode='r',buffering=-1)若open()函數(shù)調(diào)用成功,返回一個(gè)文件對象。【返回值】file1=open('E:\\a.txt') #以只讀方式打開E盤的文本文件a.txtfile2=open('b.txt','w') #以只寫方式打開當(dāng)前目錄的文本文件b.txtfile3=open('c.txt','w+') #以讀/寫方式打開文本文件c.txtfile4=open('d.txt','wb+') #以讀/寫方式打開二進(jìn)制文件d.txt示例6.2.1文件的打開與關(guān)閉1.打開文件若待打開的文件不存在,文件打開失敗,程序會拋出異常,并打印錯(cuò)誤信息。------------------------------------------------------------------------FileNotFoundErrorTraceback(mostrecentcalllast)<ipython-input-5-23b0bb5a2ffc>in<module>---->1file1=open("b.txt")FileNotFoundError:[Errno2]Nosuchfileordirectory:'b.txt'示例6.2.1文件的打開與關(guān)閉2.關(guān)閉文件Python可通過close()方法關(guān)閉文件,也可以使用with語句實(shí)現(xiàn)文件的自動關(guān)閉。close()方法是文件對象的內(nèi)置方法。(1)close()方法file.close()示例6.2.1文件的打開與關(guān)閉2.關(guān)閉文件with語句可預(yù)定義清理操作,以實(shí)現(xiàn)文件的自動關(guān)閉。(2)with語句withopen('a.txt')asf:pass示例思考:為什么要及時(shí)關(guān)閉文件?思考:為什么要及時(shí)關(guān)閉文件?計(jì)算機(jī)中可打開的文件數(shù)量是有限打開的文件占用系統(tǒng)資源若程序因異常關(guān)閉,可能產(chǎn)生數(shù)據(jù)丟失思考:為什么要及時(shí)關(guān)閉文件?6.2.2文件的讀寫Python提供了一系列讀寫文件的方法,包括讀取文件的read()、readline()、readlines()方法和寫文件的write()、writelines()方法,下面結(jié)合這些方法分別介紹如何讀寫文件。6.2.2文件的讀寫1.讀取文件——read()方法read()方法可以從指定文件中讀取指定字節(jié)的數(shù)據(jù),其語法格式如下:read(n=-1)withopen('file.txt',mode='r')asf:print(f.read(2)) #讀取兩個(gè)字節(jié)的數(shù)據(jù)

print(f.read()) #讀取剩余的全部數(shù)據(jù)示例6.2.2文件的讀寫1.讀取文件——readline()方法readline()方法可以從指定文件中讀取一行數(shù)據(jù),其語法格式如下:readline()withopen('file.txt',mode='r',encoding='utf-8')asf:print(f.readline())print(f.readline())示例6.2.2文件的讀寫1.讀取文件——readline()方法readlines()方法可以一次讀取文件中的所有數(shù)據(jù),若讀取成功,該方法會返回一個(gè)列表,文件中的每一行對應(yīng)列表中的一個(gè)元素。語法格式如下:readlines(hint=-1)withopen('file.txt',mode='r',encoding='utf-8')asf:print(f.readlines())#使用readlines()方法讀取數(shù)據(jù)示例hint:單位為字節(jié),用于控制要讀取的行數(shù)如果行中數(shù)據(jù)的總大小超出了hint字節(jié),readlines()不會再讀取更多的行。6.2.2文件的讀寫1.讀取文件read()(參數(shù)缺省時(shí))和readlines()方法都可一次讀取文件中的全部數(shù)據(jù),但因?yàn)橛?jì)算機(jī)的內(nèi)存是有限的,若文件較大,read()和readlines()的一次讀取便會耗盡系統(tǒng)內(nèi)存,所以這兩種操作都不夠安全。為了保證讀取安全,通常多次調(diào)用read()方法,每次讀取size字節(jié)的數(shù)據(jù)。6.2.2文件的讀寫2.寫文件——write()方法write()方法可以將指定字符串寫入文件,其語法格式如下:write(data)以上格式中的參數(shù)data表示要寫入文件的數(shù)據(jù),若數(shù)據(jù)寫入成功,write()方法會返回本次寫入文件的數(shù)據(jù)的字節(jié)數(shù)。string="Hereweareall,byday;bynight." #字符串withopen('write_file.txt',mode='w',encoding='utf-8')asf: size=f.write(string) #寫入字符串

print(size) #打印字節(jié)數(shù)示例6.2.2文件的讀寫2.寫文件——writelines()方法writelines()方法用于將行列表寫入文件,其語法格式如下:writelines(lines)以上格式中的參數(shù)lines表示要寫入文件中的數(shù)據(jù),該參數(shù)可以是一個(gè)字符串或者字符串列表。若寫入文件的數(shù)據(jù)在文件中需要換行,需要顯式指定換行符。string="Hereweareall,byday;\nbynightwe'rehurl'dBydreams,eachoneintoaseveralworld."withopen('write_file.txt',mode='w',encoding='utf-8')asf:f.writelines(string)示例多學(xué)一招:字符與編碼文本文件支持多種編碼方式,不同編碼方式下字符與字節(jié)的對應(yīng)關(guān)系不同,常見的編碼方式以及字符與字節(jié)的對應(yīng)關(guān)系如表所示。編碼方式語言字符數(shù)字節(jié)數(shù)ASCII中文12英文11UTF-8中文13英文11Unicode中文12英文12GBK中文12英文116.2.3文件的定位讀寫

7.2.2節(jié)使用read()方法讀取了文件file.txt,結(jié)合代碼與程序運(yùn)行結(jié)果進(jìn)行分析,可以發(fā)現(xiàn)read()方法第1次讀取了2個(gè)字符,第2次從第3個(gè)字符“e”開始讀取了剩余字符。6.2.3文件的定位讀寫在文件的一次打開與關(guān)閉之間進(jìn)行的讀寫操作是連續(xù)的,程序總是從上次讀寫的位置繼續(xù)向下進(jìn)行讀寫操作。每個(gè)文件對象都有一個(gè)稱為“文件讀寫位置”的屬性,該屬性會記錄當(dāng)前讀寫的位置。文件讀寫位置默認(rèn)為0,即在文件首部。6.2.3文件的定位讀寫Python提供了一些獲取與修改文件讀寫位置的方法,以實(shí)現(xiàn)文件的定位讀寫。tell():獲取文件當(dāng)前的讀寫位置。seek():控制文件的讀寫位置。6.2.3文件的定位讀寫tell()方法用于獲取文件當(dāng)前的讀寫位置,以操作文件file.txt為例,tell()的用法如下:1.tell()方法withopen('file.txt')asf:print(f.tell()) #獲取文件讀寫位置

print(f.read(5)) #利用read()方法移動文件讀寫位置

print(f.tell()) #再次獲取文件讀寫位置示例6.2.3文件的定位讀寫Python提供了seek()方法,使用該方法可控制文件的讀寫位置,實(shí)現(xiàn)文件的隨機(jī)讀寫。seek()方法的語法格式如下:seek(offset,from)offset:表示偏移量,即讀寫位置需要移動的字節(jié)數(shù)。from:用于指定文件的讀寫位置,該參數(shù)的取值為0、1、2。2.seek()方法0:表示文件開頭。1:表示使用當(dāng)前讀寫位置。2:表示文件末尾。seek()方法調(diào)用成功后會返回當(dāng)前讀寫位置。6.2.3文件的定位讀寫2.seek()方法withopen('file.txt')asf:print(f.tell()) #獲取文件讀寫位置

print(f.read(5)) #利用read()方法移動文件讀寫位置

print(f.tell()) #再次獲取文件讀寫位置示例6.2.3文件的定位讀寫在Python3中,若打開的是文本文件,那么seek()方法只允許相對于文件開頭移動文件位置,若在參數(shù)from值為1、2的情況下對文本文件進(jìn)行位移操作,將會產(chǎn)生錯(cuò)誤。2.seek()方法withopen('file.txt')asf:f.seek(5,0) #相對文件開頭移動5字節(jié)

f.seek(3,1)示例6.2.3文件的定位讀寫若要相對當(dāng)前讀寫位置或文件末尾進(jìn)行位移操作,需以二進(jìn)制形式打開文件。2.seek()方法withopen('file.txt','rb')asf:f.seek(5,0)f.seek(3,1)示例6.3數(shù)據(jù)格式化維度從廣義上講,維度是與事物“有聯(lián)系”的概念的數(shù)量,根據(jù)“有聯(lián)系”的概念的數(shù)量,事物可分為不同維度。6.3數(shù)據(jù)格式化基于維度的數(shù)據(jù)分類根據(jù)組織數(shù)據(jù)時(shí)與數(shù)據(jù)有聯(lián)系的參數(shù)的數(shù)量,數(shù)據(jù)可分為一維數(shù)據(jù)、二維數(shù)據(jù)和多維數(shù)據(jù)。具有對等關(guān)系的一組線性數(shù)據(jù),如:一維列表一維元組集合一維數(shù)據(jù)二維數(shù)據(jù)關(guān)聯(lián)參數(shù)的數(shù)量為2,如:矩陣二維數(shù)組二維列表二維元組二維數(shù)據(jù)利用鍵值對等簡單的二院關(guān)系展示數(shù)據(jù)間的復(fù)雜結(jié)構(gòu),如:字典多維數(shù)據(jù)6.3.1基于維度的數(shù)據(jù)分類示例成都,杭州,重慶,武漢,蘇州,西安,天津,南京,鄭州,長沙,沈陽,青島,寧波,東莞,無錫一維數(shù)據(jù)二維數(shù)據(jù)6.3.1基于維度的數(shù)據(jù)分類示例“高三一班考試成績”:[ {“姓名”:“劉婧”, “語文”:“124”, “數(shù)學(xué)”:“137”, “英語”:“145”, “理綜”:“260”}; {“姓名”:“張華”, “語文”:“116”, “數(shù)學(xué)”:“143”, “英語”:“139”, “理綜”:“263”};

…… ]多維數(shù)據(jù)6.3.1基于維度的數(shù)據(jù)分類一二維數(shù)據(jù)的存儲與讀寫一維數(shù)據(jù)呈線性排列,一般用特殊字符分隔,例如:使用空格分隔:成都杭州重慶武漢蘇州西安天津使用逗號分隔:成都,杭州,重慶,武漢,蘇州,西安,天津使用&分隔:成都&杭州&重慶&武漢&蘇州&西安&天津1.數(shù)據(jù)存儲一維數(shù)據(jù)的存儲需要注意以下幾點(diǎn):同一文件或同組文件一般使用同一分隔符分隔。分隔數(shù)據(jù)的分隔符不應(yīng)出現(xiàn)在數(shù)據(jù)中。分隔符為英文半角符號,一般不使用中文符號作為分隔符。6.3.2一二維數(shù)據(jù)的存儲與讀寫一二維數(shù)據(jù)的存儲與讀寫二維數(shù)據(jù)可視為多條一維數(shù)據(jù)的集合,當(dāng)二維數(shù)據(jù)只有一個(gè)元素時(shí),這個(gè)二維數(shù)據(jù)就是一維數(shù)據(jù)。CSV(Commae-SeparetedValues,逗號分隔值)是國際上通用的一二維數(shù)據(jù)存儲格式。1.數(shù)據(jù)存儲CSV格式規(guī)范:以純文本形式存儲表格數(shù)據(jù)文件的每一行對應(yīng)表格中的一條數(shù)據(jù)記錄每條記錄由一個(gè)或多個(gè)字段組成字段之間使用逗號(英文、半角)分隔6.3.2一二維數(shù)據(jù)的存儲與讀寫一二維數(shù)據(jù)的存儲與讀寫1.數(shù)據(jù)存儲CSV也稱字符分隔值,具體示例如下:姓名,語文,數(shù)學(xué),英語,理綜劉婧,124,137,145,260張華,116,143,139,263邢昭林,120,130,148,255鞠依依,115,145,131,240黃麗萍,123,108,121,235趙越,132,100,112,2106.3.2一二維數(shù)據(jù)的存儲與讀寫一二維數(shù)據(jù)的存儲與讀寫2.數(shù)據(jù)讀取Windows平臺中CSV文件的后綴名為.csv,可通過OfficeExcel或記事本打開Python在程序中讀取.csv文件后會以二維列表形式存儲其中內(nèi)容示例csv_file=open('score.csv')lines=[]forlineincsv_file: line=line.replace('\n','') lines.append(line.split(','))print(lines)csv_file.close()6.3.2一二維數(shù)據(jù)的存儲與讀寫一二維數(shù)據(jù)的存儲與讀寫3.數(shù)據(jù)寫入將一、二維數(shù)據(jù)寫入文件中,即按照數(shù)據(jù)的組織形式,在文件中添加新的數(shù)據(jù)。6.3.2一二維數(shù)據(jù)的存儲與讀寫...forlineinlines:print(line)file_new.write(','.join(line)+'\n')csv_file.close()file_new.close()示例多維數(shù)據(jù)的格式化為了直觀地表示多維數(shù)據(jù),也為了便于組織和操作,三維及以上的多維數(shù)據(jù)統(tǒng)一采用鍵值對的形式進(jìn)行格式化。網(wǎng)絡(luò)平臺上傳遞的數(shù)據(jù)大多是高維數(shù)據(jù),JSON是網(wǎng)絡(luò)中常見的高維數(shù)據(jù)格式。JSON格式的數(shù)據(jù)遵循以下語法規(guī)則:數(shù)據(jù)存儲在鍵值對(key:value)中,例如“姓名”:“張華”。數(shù)據(jù)的字段由逗號分隔,例如“姓名”:“張華”,“語文”:“116”。一個(gè)花括號保存一個(gè)JSON對象,例如{“姓名”:“張華”,“語文”:“116”}。一個(gè)方括號保存一個(gè)數(shù)組,例如[{“姓名”:“張華”,“語文”:“116”}]。6.3.3多維數(shù)據(jù)的格式化示例:“高三二班考試成績”:[ {“姓名”:“陳誠”, “語文”:“124”, “數(shù)學(xué)”:“127”, “英語”:“145”, “理綜”:“259”}; {“姓名”:“黃思”, “語文”:“116”, “數(shù)學(xué)”:“143”, “英語”:“119”, “理綜”:“273”};

…… ]6.3.3多維數(shù)據(jù)的格式化示例:將學(xué)生成績以XML格式存儲<高三二班考試成績> <姓名>陳誠</姓名><語文>124</語文><數(shù)學(xué)>127<數(shù)學(xué)/><英語>145<英語/><理綜>259<理綜/> <姓名>黃思</姓名><語文>116</語文><數(shù)學(xué)>143<數(shù)學(xué)/><英語>119<英語/><理綜>273<理綜/> ……</高三二班考試成績>6.3.3多維數(shù)據(jù)的格式化JSON模塊——json利用json模塊的dumps()函數(shù)和loads()函數(shù)可以實(shí)現(xiàn)Python對象和JSON數(shù)據(jù)之間的轉(zhuǎn)換,這兩個(gè)函數(shù)的具體功能如表所示。函數(shù)功能dumps()對Python對象進(jìn)行轉(zhuǎn)碼,將其轉(zhuǎn)化為JSON字符串loads()將JSON字符串解析為Python對象6.3.3多維數(shù)據(jù)的格式化Python對象與JSON數(shù)據(jù)轉(zhuǎn)化時(shí)的類型對照表Python對象JSON數(shù)據(jù)dictobjectlist,tuplearraystr,unicodestringint,long,floatnumberTruetrueFalsefalseNonenull6.3.3多維數(shù)據(jù)的格式化1.dumps()函數(shù)示例:使用dumps()函數(shù)對Python對象進(jìn)行轉(zhuǎn)碼。>>>importjson>>>pyobj=[[1,2,3],345,23.12,'qwe',{'key1':(1,2,3),'key2':(2,3,4)},

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論