Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 4-2 Python典型數(shù)據(jù)類型_第1頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 4-2 Python典型數(shù)據(jù)類型_第2頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 4-2 Python典型數(shù)據(jù)類型_第3頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 4-2 Python典型數(shù)據(jù)類型_第4頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 4-2 Python典型數(shù)據(jù)類型_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python

特征數(shù)據(jù)類型

——(字典&集合)字典數(shù)據(jù)類型許多應(yīng)用中要利用關(guān)鍵詞查找對(duì)應(yīng)信息。例如,通過(guò)學(xué)號(hào)來(lái)檢索某學(xué)生的信息。其中,通過(guò)學(xué)號(hào)查找所對(duì)應(yīng)學(xué)生的信息的方式稱為“映射”。Python語(yǔ)言的字典(dictionary)類型就是一種映射。字典及后面將要提到的集合中的數(shù)據(jù)元素之間沒(méi)有任何確定的順序關(guān)系,屬于無(wú)序的數(shù)據(jù)集合體,因此不能像序列那樣通過(guò)位置索引來(lái)訪問(wèn)數(shù)據(jù)元素。字典數(shù)據(jù)類型在Python中,字典是由“關(guān)鍵字:值”對(duì)組成的集合體。字典包含了一個(gè)索引的集合,稱為鍵(key)和值(value)的集合,一個(gè)鍵對(duì)應(yīng)一個(gè)值。這種一一對(duì)應(yīng)的關(guān)聯(lián)稱為鍵值對(duì)(key-valuepair),或稱為項(xiàng)(item)?!瓣P(guān)鍵字”相當(dāng)于索引,而它對(duì)應(yīng)的“值”就是數(shù)據(jù)。數(shù)據(jù)是根據(jù)關(guān)鍵字來(lái)存儲(chǔ)的,只要找到關(guān)鍵字就可以找到需要的值。同一個(gè)字典之內(nèi)關(guān)鍵字必須是互不相同的,字典中一個(gè)關(guān)鍵字只能與一個(gè)值關(guān)聯(lián),對(duì)于同一個(gè)關(guān)鍵字,后添加的值會(huì)覆蓋之前的值。字典的索引字典是Python中惟一的映射類型,采用“關(guān)鍵字:值”對(duì)的形式存儲(chǔ)數(shù)據(jù)。序列是以連續(xù)的整數(shù)為索引,與此不同的是,字典以關(guān)鍵字為索引,關(guān)鍵字可以是任意不可變類型,如整數(shù)、字符串。如果元組中只包含字符串和數(shù)字,則元組也可以作為關(guān)鍵字;如果元組直接或間接地包含了可變類型,就不能作為關(guān)鍵字。不能用列表做關(guān)鍵字,因?yàn)榱斜砜梢孕薷摹A硗?,字典的存?chǔ)是無(wú)序的。字典與序列的區(qū)別(1)存取和訪問(wèn)數(shù)據(jù)的方式不同。字典中的元素是通過(guò)關(guān)鍵字來(lái)存取的,而序列是通過(guò)編號(hào)來(lái)存取的。字典通過(guò)關(guān)鍵字將一系列值聯(lián)系起來(lái),這樣就可以使用關(guān)鍵字從字典中取出一個(gè)元素。如同列表和元組一樣,可以使用索引操作從字典中獲取內(nèi)容,但字典的索引是關(guān)鍵字,而序列從起始元素開始按順序編號(hào)進(jìn)行索引。(2)列表、元組是有序的數(shù)據(jù)集合體,而字典是無(wú)序的數(shù)據(jù)集合體。與列表、元組不同,保存在字典中的元素并沒(méi)有特定的順序。實(shí)際上,Python將各項(xiàng)從左到右隨機(jī)排序,以便快速查找。關(guān)鍵字提供了字典中元素的象征性位置,而不代表物理存儲(chǔ)順序。(3)字典是可變類型,可以在原處增長(zhǎng)或縮短,無(wú)須生成一份副本。(4)字典是異構(gòu)的,可以包含任何類型的數(shù)據(jù),如列表、元組或其他字典,支持任意層次的嵌套。創(chuàng)建字典字典就是用花括號(hào)包裹的鍵值對(duì)的集合。每個(gè)鍵值對(duì)用冒號(hào)“:”分隔,每對(duì)之間用逗號(hào)“,”分隔。格式如下:d={keyl:valuel,key2:value2[,…keyn:valuen]}用{}創(chuàng)建字典是最簡(jiǎn)單的方法,方法如下:>>>dict1={'jack':4098,'sape':4139}>>>dict2={(1,2):['a','b'],(3,4):['c','d'],(5,6):['e','f']}>>>dict1={}#創(chuàng)建空字典創(chuàng)建字典可以通過(guò)dict(構(gòu)造器)來(lái)創(chuàng)建字典,構(gòu)造器的輸入?yún)?shù)為列表(或元組),列表(或元組)內(nèi)部是一系列包含兩個(gè)值的列表或元組。例如:>>>dict([('sape',4139),('guido',4127),('jack',4098)]){'sape':4139,'guido':4127,'jack':4098}該語(yǔ)句的輸入?yún)?shù)為列表,列表內(nèi)部為元組??梢酝ㄟ^(guò)關(guān)鍵字形式創(chuàng)建字典,但鍵只能為字符串型,并且字符串不用加引號(hào)。例如:>>>dict(name='allen',age='40'){'name':'allen','age':'40'}訪問(wèn)字典中的值Python通過(guò)關(guān)鍵字來(lái)訪問(wèn)字典的元素,一般格式為:字典名[關(guān)鍵字]要得到字典中某個(gè)元素的值,可用字典鍵加上方括號(hào)來(lái)得到,即dict[key]形式返回鍵key對(duì)應(yīng)的值value,如果key不在字典中,則會(huì)引發(fā)KeyError。例如:>>>dict={'name':'earth','port':80}>>>dict{'name':'earth','port':80}>>>dict['port']80字典操作字典中的鍵值對(duì)是可以進(jìn)行添加、刪除、修改等更新操作的。更新字典值的語(yǔ)句格式為:字典名[關(guān)鍵字]=值。例如:>>>adict={'name':'earth','port':80}>>>adict['age']=18 #增加一個(gè)鍵值對(duì)>>>adict{'name':'earth','port':80,'age':18}>>>adict['name']='moon' #修改值>>>adict{'name':'moon','port':80,'age':18}>>>deladict['port'] #刪除鍵值對(duì)>>>adict{'name':'moon','age':18}字典操作字典操作1.返回字典所有的鍵、值和項(xiàng)dict.keys()、dict.values()、dict.items()這三個(gè)方法分別返回包含原字典中每項(xiàng)的鍵、值和項(xiàng)(鍵、值)的列表,例如:>>>d={'name':'a1ice','age':19,'sex':'F'}>>>d.keys()dict_keys(['name','age','sex'])>>>d.items()dict_items([('name','a1ice'),('age',19),('sex','F')])>>>d.values()dict_values(['a1ice',19,'F'])字典操作要遍歷一個(gè)字典,只需要遍歷它的鍵即可,例如:dict_items([('name','a1ice'),('age',19),('sex','F')])>>>forkeyind.keys():print('key=%s,value=%s.'%(key,d[key]))運(yùn)行結(jié)果如下:key=name,value=a1ice.key=age,value=19.key=sex,value=F.字典操作2.字典清空用dict.clear()可清空原始字典中所有的元素,使字典變成一個(gè)空字典。例如:>>>d={'name':'a1ice','age':19,'sex':'F'}>>>d.clear()>>>d{}字典操作3.字典的復(fù)制dict.copy()方法返回一個(gè)具有相同鍵值對(duì)的新字典。例如:>>>x={'a':1,'b':[2,3,4]}>>>y=x.copy()>>>x['a']=5 #給字典x中的關(guān)鍵字a的鍵值修改>>>y #字典y不改變{'a':1,'b':[2,3,4]}>>>x{'a':5,'b':[2,3,4]}字典操作4.以鍵查值dict.get(key,default=None)方法可訪問(wèn)字典項(xiàng)的對(duì)應(yīng)值。若使用get訪問(wèn)一個(gè)不存在的key,會(huì)得到None值。例如:>>>d={}>>>print(d.get('name'))None>>>d={'name':'N/A'}>>>d.get('name')'N/A'>>>d['name']='Erci'>>>d.get('name')'Erci'字典操作5.移除鍵值對(duì)dict.pop(key[,default])方法用來(lái)獲得并返回對(duì)應(yīng)給定鍵的值,然后將這個(gè)鍵值對(duì)從字典中移除,例如:>>>d={'name':'a1ice','age':19,'sex':'F'}>>>d.pop('name')'a1ice'>>>d{'age':19,'sex':'F'}字典操作6.字典更新dict.update(addict)方法可以利用一個(gè)字典更新另一個(gè)字典。提供的字典中的所有鍵值對(duì)均會(huì)被添加到舊字典中,若有相同的鍵則會(huì)進(jìn)行覆蓋,例如:>>>d={'name':'a1ice','age':19,'sex':'F'}>>>x={'name':'bob','phone':'12345678'}>>>d.update(x)>>>d{'name':'bob','age':19,'sex':'F','phone':'12345678'}字典操作例輸入兩個(gè)數(shù)字,并輸入加、減、乘、除運(yùn)算符號(hào),輸出運(yùn)算結(jié)果。若輸入其他符號(hào),則退出程序。程序如下:tup=('+','-','*','/')whileTrue:a=float(input('請(qǐng)輸入第一個(gè)數(shù)字'))b=float(input('請(qǐng)輸入第二個(gè)數(shù)字'))t=input('請(qǐng)輸入加減乘除運(yùn)算符號(hào),其他符號(hào)為退出程序')iftnotintup:breakelse:dic={'+':a+b,'-':a-b,'*':a*b,'/':a/b}print('%s%s%s=%0.1f'%(a,t,b,dic.get(t)))字典應(yīng)用例引入內(nèi)置模塊calendar,輸入年、月、日,根據(jù)weekday(year,month,day)的返回值,輸出該日期是星期幾。函數(shù)weekday()返回0~6分別對(duì)應(yīng)星期一至星期日。程序如下:fromcalendarimport*y=input('請(qǐng)輸入年')m=input('請(qǐng)輸入月')d=input('請(qǐng)輸入日')dic={0:'星期一',1:'星期二',2:'星期三',3:'星期四',4:'星期五',5:'星期六',6:'星期日'}ify.isdigit()andm.isdigit()andd.isdigit()and1<=int(m)<=12and1<=int(d)<=31:w=weekday(int(y),int(m),int(d))print('您輸入的%s年%s月%s日是%s'%(y,m,d,dic[w]))else:print('輸入日期有誤')字典應(yīng)用例輸入年、月、日,判斷這一天是這一年的第幾天。分析:以3月5日為例,應(yīng)該先把前兩個(gè)月的天數(shù)加起來(lái),再加上5,即本年的第幾天。平年1-12月份的天數(shù)分別為31、28、31、30、31、30、31、31、30、31、30、31,但閏年的2月份是29天。程序如下:year=int(input('請(qǐng)輸入年份:'))month=input('請(qǐng)輸入月份:')day=int(input('請(qǐng)輸入日期:'))dic={'1':31,'2':28,'3':31,'4':30,'5':31,'6':30,'7':31,'8':31,'9':30,'10':31,'11':30,'12':31}days=0字典應(yīng)用if((year%4==0)and(year%100!=0))or(year%400==0):dic['2']=29 #如果是閏年,則2月份是29天ifint(month)>1:forobjindic:ifmonth==obj:foriinrange(1,int(obj)):days+=dic[str(i)]days+=dayelse:days=dayprint('{}年{}月{}日是該年的第{}天'.format(year,month,day,days))集合數(shù)據(jù)類型集合(set)是不重復(fù)元素的無(wú)序集,類似于數(shù)學(xué)中的集合概念,可對(duì)其進(jìn)行交、并、差等運(yùn)算。它兼具了列表和字典的一些性質(zhì)。集合有類似字典的特點(diǎn):用花括號(hào)“{}”來(lái)定義,其元素是非序列類型的數(shù)據(jù),也就是沒(méi)有順序,并且集合中的元素不可重復(fù),類似于字典中的鍵。集合的內(nèi)部結(jié)構(gòu)與字典相似,區(qū)別是“只有鍵沒(méi)有值”。另一方面,集合也具有一些列表的特點(diǎn):持有一系列元素,并且可原處修改。由于集合是無(wú)序的,不記錄元素位置或者插入點(diǎn),因此不支持索引、分片或其他類似序列(sequence-like)的操作。集合的創(chuàng)建在Python中,創(chuàng)建集合有兩種方式:一種是用一對(duì)花括號(hào)將多個(gè)用逗號(hào)分隔的數(shù)據(jù)括起來(lái);另外一種是使用set()函數(shù),該函數(shù)可以將字符串、列表、元組等類型的數(shù)據(jù)轉(zhuǎn)換成集合類型的數(shù)據(jù)。1.直接使用“{}”創(chuàng)建例4.33集合創(chuàng)建舉例>>>s3={1,2,3,4,5}>>>s3{1,2,3,4,5}>>>s4=set() #注意創(chuàng)建空集合要用set()而非{},若用{},將創(chuàng)建空字典>>>s4set()集合的創(chuàng)建2.由字符串創(chuàng)建用函數(shù)set(str)將str中的字符拆開以形成集合。例如:>>>s1=set('hellopython')>>>s1{'n','p','y','o','e','t','l','h'}注意:“hellopython”中包含兩個(gè)'l'、兩個(gè)'o'和兩個(gè)'h',但在s1中,l、o和h分別只有一個(gè),即集合創(chuàng)建時(shí)自動(dòng)去除了重復(fù)字符。集合的創(chuàng)建3.由列表或元組創(chuàng)建用函數(shù)set(seq)創(chuàng)建集合,參數(shù)可以是列表或元組,在下面例子中,調(diào)用set()并傳入list,將list的元素作為集合的元素。>>>s2=set([1,'name',2,'age','hobby'])>>>s2{1,2,'name','hobby','age'}>>>s2=set((1,2,3))>>>s2{1,2,3}注意,由于集合內(nèi)部存儲(chǔ)的元素是無(wú)序的,因此輸出的順序和原列表的順序有可能是不同的。集合的創(chuàng)建4.集合的遍歷集合與for循環(huán)語(yǔ)句配合使用,可實(shí)現(xiàn)對(duì)集合各個(gè)元素的遍歷。例4.34集合的遍歷示例。程序如下:s={1,2,3,4}t=0forxins: print(x,end='\t') t+=xprint(t)程序輸出集合中各個(gè)元素值,并計(jì)算出累加和。運(yùn)行結(jié)果如下:1 2 3 4 10集合的修改集合的修改(1)用set.add(x)方法向集合set中添加元素x。例如:>>>a_set={1,2}>>>a_set.add('Python')>>>a_set{'Python',1,2}>>>a_set.add(['alice','bob'])#注意向集合添加列表的操作會(huì)導(dǎo)致錯(cuò)誤Traceback(mostrecentcalllast):File"<pyshell#84>",line1,in<module>a_set.add(['alice','bob'])TypeError:unhashabletype:'list'集合的修改(2)用set.update(a_set)方法使用集合a_set更新原集合,即把a(bǔ)_set中的元素放入原集合中。例如:>>>b_set={'alice'}>>>a_set={'bob'}>>>b_set.update(a_set)>>>b_set{'bob','alice'}>>>a_set#a_set沒(méi)有變{'bob'}集合的修改(3)用set.pop()方法從set中任意選擇一個(gè)元素,刪除并返回該元素。注意:不可指定要?jiǎng)h除的元素,否則將報(bào)錯(cuò)(pop()不能有參數(shù)),若set是空也會(huì)報(bào)錯(cuò)。例如:>>>a_set={'Python','c#','java','perl'}>>>a_set.pop()'Python'>>>a_set{'perl','c#','java'}>>>a_set.pop()'perl'集合的修改(4)set.remove(x)與set.discard(x)方法,兩者的作用都是刪除集合中元素x,不同的是,對(duì)于set.remove(x),x必須是set中的元素,否則報(bào)錯(cuò)。而對(duì)于set.discard(x),若x不是集合中的元素,則什么也不做。例如:>>>a_set=set('abcde')>>>a_set{'c','e','b','d','a'}>>>a_set.remove('b')>>>a_set{'c','e','d','a'}集合的修改(5)用set.clear()方法刪除集合中的所有元素。例如:>>>a_set={1,2,3}>>>a_set.clear()>>>a_setset()集合的數(shù)學(xué)運(yùn)算集合運(yùn)算示例>>>s1={'a','e','i','o','u'}>>>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論