Python程序設(shè)計(jì)入門(mén)與實(shí)戰(zhàn) 課件 6、Python容器_第1頁(yè)
Python程序設(shè)計(jì)入門(mén)與實(shí)戰(zhàn) 課件 6、Python容器_第2頁(yè)
Python程序設(shè)計(jì)入門(mén)與實(shí)戰(zhàn) 課件 6、Python容器_第3頁(yè)
Python程序設(shè)計(jì)入門(mén)與實(shí)戰(zhàn) 課件 6、Python容器_第4頁(yè)
Python程序設(shè)計(jì)入門(mén)與實(shí)戰(zhàn) 課件 6、Python容器_第5頁(yè)
已閱讀5頁(yè),還剩81頁(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容器(2)《智能車(chē)Python編程設(shè)計(jì)》課程大綱列表列表簡(jiǎn)述列表創(chuàng)建與刪除列表元素訪問(wèn)列表常用方法列表對(duì)象支持的運(yùn)算符內(nèi)置函數(shù)對(duì)列表的操作列表推導(dǎo)式切片元組與生成器表達(dá)式元組簡(jiǎn)述元組創(chuàng)建與元素訪問(wèn)元組與列表的異同點(diǎn)生成器推導(dǎo)式字典字典簡(jiǎn)述字典創(chuàng)建與刪除字典元素的訪問(wèn)元素添加、修改與刪除課程大綱集合集合簡(jiǎn)述集合對(duì)象的創(chuàng)建與刪除集合操作與運(yùn)算序列解包序列解包列表列表列表簡(jiǎn)述列表(list)是最重要的Python內(nèi)置對(duì)象之一,是包含若干元素的有序連續(xù)內(nèi)存空間。在形式上,列表的所有元素放在一對(duì)方括號(hào)[]中,相鄰元素之間使用逗號(hào)分隔。在Python中,同一個(gè)列表中元素的數(shù)據(jù)類型可以各不相同,可以同時(shí)包含整數(shù)、實(shí)數(shù)、字符串等基本類型的元素,也可以包含列表、元組、字典、集合、函數(shù)以及其他任意對(duì)象。如果只有一對(duì)方括號(hào)而沒(méi)有任何元素則表示空列表。列表列表創(chuàng)建與刪除使用“=”直接將一個(gè)列表賦值給變量即可創(chuàng)建列表對(duì)象。例如:>>>a_list=['a','b','mpilgrim','z','example’]>>>a_list=[]#創(chuàng)建空列表列表也可以使用list()函數(shù)把元組、range對(duì)象、字符串、字典、集合或其他可迭代對(duì)象轉(zhuǎn)換為列表。例如:>>>list((3,5,7,9,11))#將元組轉(zhuǎn)換為列表[3,5,7,9,11]>>>list(range(1,10,2))#將range對(duì)象轉(zhuǎn)換為列表[1,3,5,7,9]>>>list('helloworld')#將字符串轉(zhuǎn)換為列表

['h','e','l','l','o','','w','o','r','l','d']列表>>>list({3,7,5}) #將集合轉(zhuǎn)換為列表[3,5,7]>>>list({'a':3,'b':9,'c':78}) #將字典的“鍵”轉(zhuǎn)換為列表['a','c','b’]>>>list({'a':3,'b':9,'c':78}.items()) #將字典的“鍵:值”對(duì)轉(zhuǎn)換為列表[('b',9),('c',78),('a',3)]>>>x=list() #創(chuàng)建空列表列表當(dāng)一個(gè)列表不再使用時(shí),可以使用del命令將其刪除。例如:>>>x=[1,2,3]>>>delx#刪除列表對(duì)象>>>x#對(duì)象刪除后無(wú)法再訪問(wèn),拋出異常

NameError:name'x'isnotdefined列表列表元素訪問(wèn)創(chuàng)建列表之后,可以使用整數(shù)作為下標(biāo)來(lái)訪問(wèn)其中的元素,其中0表示第1個(gè)元素,1表示第2個(gè)元素,2表示第3個(gè)元素,以此類推;列表還支持使用負(fù)整數(shù)作為下標(biāo),其中-1表示最后1個(gè)元素,-2表示倒數(shù)第2個(gè)元素,-3表示倒數(shù)第3個(gè)元素,以此類推。例如:>>>x=list('Python')#創(chuàng)建類別對(duì)象>>>x['P','y','t','h','o','n’]>>>x[0] #下標(biāo)為0的元素,第一個(gè)元素'P'列表>>>x[-1]#下標(biāo)為-1的元素,最后一個(gè)元素

'n'列表(1)append()、insert()、extend()append()用于向列表尾部追加一個(gè)元素,insert()用于向列表任意指定位置插入一個(gè)元素,extend()用于將另一個(gè)列表中的所有元素追加至當(dāng)前列表的尾部。例如:>>>x=[1,2,3]>>>x.append(4)#在尾部追加元素>>>x.insert(0,0)#在指定位置插入元素>>>x.extend([5,6,7])#在尾部追加多個(gè)元素>>>x[0,1,2,3,4,5,6,7]列表(2)pop()、remove()pop()用于刪除并返回指定位置(默認(rèn)是最后一個(gè))上的元素;remove()用于刪除列表中第一個(gè)值與指定值相等的元素。另外,還可以使用del命令刪除列表中指定位置的元素。例如:>>>x=[1,2,3,4,5,6,7]>>>x.pop()#彈出并返回尾部元素7>>>x.pop(0)#彈出并返回指定位置的元素1列表例如:>>>x=[1,2,1,1,2]>>>x.remove(2)#刪除首個(gè)值為2的元素>>>delx[3]#刪除指定位置上的元素>>>x[1,1,1]列表(3)count()、index()列表方法count()用于返回列表中指定元素出現(xiàn)的次數(shù);index()用于返回指定元素在列表中首次出現(xiàn)的位置,如果該元素不在列表中則拋出異常。例如:>>>x=[1,2,2,3,3,3,4,4,4,4]

>>>x.count(3)#元素3在列表x中的出現(xiàn)次數(shù)

3 >>>x.count(5)#不存在,返回0

0 >>>x.index(2)#元素2在列表x中首次出現(xiàn)的索引

1 >>>x.index(5)#列表x中沒(méi)有5,拋出異常

ValueError:5isnotinlist列表(4)sort()、reverse()列表對(duì)象的sort()方法用于按照指定的規(guī)則對(duì)所有元素進(jìn)行排序;reverse()方法用于將列表所有元素逆序或翻轉(zhuǎn)。例如:>>>x=list(range(11))#包含11個(gè)整數(shù)的列表>>>importrandom>>>random.shuffle(x)#把列表x中的元素隨機(jī)亂序

>>>x

[6,0,1,7,4,3,2,8,5,10,9]

>>>x.sort(key=lambdaitem:len(str(item)),reverse=True)#按轉(zhuǎn)換成字符串以后的長(zhǎng)度,降序排列列表>>>x

[10,6,0,1,7,4,3,2,8,5,9]

>>>x.sort(key=str)#按轉(zhuǎn)換為字符串后的大小,升序排序>>>x

[0,1,10,2,3,4,5,6,7,8,9]

>>>x.sort()#按默認(rèn)規(guī)則排序>>>x[0,1,2,3,4,5,6,7,8,9,10]>>>x.reverse()#把所有元素翻轉(zhuǎn)或逆序>>>x[10,9,8,7,6,5,4,3,2,1,0]列表列表常用方法方法說(shuō)明append(x)將x追加至列表尾部extend(L)將列表L中所有元素追加至列表尾部insert(index,x)在列表index位置處插入x,該位置后面的所有元素后移并且在列表中的索引加1,如果index為正數(shù)且大于列表長(zhǎng)度則在列表尾部追加x,如果index為負(fù)數(shù)且小于列表長(zhǎng)度的相反數(shù)則在列表頭部插入元素xremove(x)在列表中刪除第一個(gè)值為x的元素,該元素之后所有元素前移并且索引減1,如果列表中不存在x則拋出異常pop([index])刪除并返回列表中下標(biāo)為index的元素,如果不指定index則默認(rèn)為-1,彈出最后一個(gè)元素;如果彈出中間位置的元素則后面的元素索引減1;如果index不是[-L,L]區(qū)間上的整數(shù)則拋出異常列表方法說(shuō)明clear()清空列表,刪除列表中所有元素,保留列表對(duì)象index(x)返回列表中第一個(gè)值為x的元素的索引,若不存在值為x的元素則拋出異常count(x)返回x在列表中的出現(xiàn)次數(shù)reverse()對(duì)列表所有元素進(jìn)行原地逆序,首尾交換sort(key=None,reverse=False)對(duì)列表中的元素進(jìn)行原地排序,key用來(lái)指定排序規(guī)則,reverse為False表示升序,True表示降序列表列表對(duì)象支持的運(yùn)算符(1)加法運(yùn)算符+也可以實(shí)現(xiàn)列表增加元素的目的,但不屬于原地操作,而是返回新列表,涉及大量元素的復(fù)制,效率非常低。使用復(fù)合賦值運(yùn)算符+=實(shí)現(xiàn)列表追加元素時(shí)屬于原地操作,與append()方法一樣高效。例如:x=[1,2,3]

>>>id(x)

53868168>>>x=x+[4]#連接兩個(gè)列表

>>>x

[1,2,3,4]列表>>>id(x)#內(nèi)存地址發(fā)生改變

53875720>>>x+=[5]#為列表追加元素

>>>x

[1,2,3,4,5]

>>>id(x)#內(nèi)存地址不變

53875720列表(2)乘法運(yùn)算符*可以用于列表和整數(shù)相乘,表示序列重復(fù),返回新列表。運(yùn)算符*=也可以用于列表元素重復(fù),屬于原地操作。例如:>>>x=[1,2,3,4]>>>id(x)54497224>>>x=x*2#元素重復(fù),返回新列表>>>x[1,2,3,4,1,2,3,4]>>>id(x)#地址發(fā)生改變54603912列表>>>x*=2#元素重復(fù),原地進(jìn)行>>>x[1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]>>>id(x)#地址不變54603912列表(3)成員測(cè)試運(yùn)算符in可用于測(cè)試列表中是否包含某個(gè)元素,查詢時(shí)間隨著列表長(zhǎng)度的增加而線性增加,而同樣的操作對(duì)于集合而言則是常數(shù)級(jí)的。例如:>>>3in[1,2,3]

True

>>>3in[1,2,'3‘]

False列表(4)關(guān)系運(yùn)算符可以用來(lái)比較兩個(gè)列表的大小。例如:>>>[1,2,4]>[1,2,3,5]#逐個(gè)比較對(duì)應(yīng)位置的元素,直到某個(gè)能夠比較出大小為止。True>>>[1,2,4]==[1,2,3,5]

False列表內(nèi)置函數(shù)對(duì)列表的操作max()、min()函數(shù)用于返回列表中所有元素的最大值和最小值,sum()函數(shù)用于返回列表中所有元素之和;len()函數(shù)用于返回列表中元素個(gè)數(shù),zip()函數(shù)用于將多個(gè)列表中元素重新組合為元組并返回包含這些元組的zip對(duì)象;enumerate()函數(shù)返回包含若干下標(biāo)和值的迭代對(duì)象;map()函數(shù)把函數(shù)映射到列表上的每個(gè)元素,filter()函數(shù)根據(jù)指定函數(shù)的返回值對(duì)列表元素進(jìn)行過(guò)濾;all()函數(shù)用來(lái)測(cè)試列表中是否所有元素都等價(jià)于True,any()用來(lái)測(cè)試列表中是否有等價(jià)于True的元素。標(biāo)準(zhǔn)庫(kù)functools中的reduce()函數(shù)以及標(biāo)準(zhǔn)庫(kù)itertools中的compress()、groupby()、dropwhile()等大量函數(shù)也可以對(duì)列表進(jìn)行操作。列表例如:>>>x=list(range(11))#生成列表

>>>importrandom>>>random.shuffle(x)#打亂列表中元素順序>>>x[0,6,10,9,8,7,4,5,2,1,3]>>>all(x)#測(cè)試是否所有元素都等價(jià)于TrueFalse>>>any(x)#測(cè)試是否存在等價(jià)于True的元素True>>>max(x)#返回最大值10列表

>>>max(x,key=str)#按指定規(guī)則返回最大值9>>>min(x)0>>>sum(x)#所有元素之和55>>>len(x)#列表元素個(gè)數(shù)11>>>list(zip(x,[1]*11))#多列表元素重新組合[(0,1),(6,1),(10,1),(9,1),(8,1),(7,1),(4,1),(5,1),(2,1),(1,1),(3,1)]

列表>>>list(zip(range(1,4)))#zip()函數(shù)也可以用于一個(gè)序列或迭代對(duì)象[(1,),(2,),(3,)]>>>list(zip(['a','b','c'],[1,2]))#如果兩個(gè)列表不等長(zhǎng),以短的為準(zhǔn)[('a',1),('b',2)]>>>enumerate(x)#枚舉列表元素,返回enumerate對(duì)象<enumerateobjectat0x00000000030A9120>>>>list(enumerate(x))#enumerate對(duì)象可以轉(zhuǎn)換為列表、元組、集合[(0,0),(1,6),(2,10),(3,9),(4,8),(5,7),(6,4),(7,5),(8,2),(9,1),(10,3)]列表列表推導(dǎo)式列表推導(dǎo)式使用非常簡(jiǎn)潔的方式來(lái)快速生成滿足特定需求的列表,代碼具有非常強(qiáng)的可讀性。列表推導(dǎo)式語(yǔ)法形式為:[expressionforexpr1insequence1ifcondition1 forexpr2insequence2ifcondition2 forexpr3insequence3ifcondition3 ... forexprNinsequenceNifconditionN]列表列表推導(dǎo)式在邏輯上等價(jià)于一個(gè)循環(huán)語(yǔ)句,只是形式上更加簡(jiǎn)潔。例如:>>>aList=[x*xforxinrange(10)]相當(dāng)于>>>aList=[]>>>forxinrange(10):aList.append(x*x)列表>>>freshfruit=['banana','loganberry','passionfruit‘]>>>aList=[w.strip()forwinfreshfruit]

等價(jià)于下面的代碼>>>aList=[]>>>foriteminfreshfruit:aList.append(item.strip())列表切片在形式上,切片使用2個(gè)冒號(hào)分隔的3個(gè)數(shù)字來(lái)完成。[start:end:step]第一個(gè)數(shù)字start表示切片開(kāi)始位置,默認(rèn)為0;第二個(gè)數(shù)字end表示切片截止(但不包含)位置(默認(rèn)為列表長(zhǎng)度);第三個(gè)數(shù)字step表示切片的步長(zhǎng)(默認(rèn)為1)。當(dāng)start為0時(shí)可以省略,當(dāng)end為列表長(zhǎng)度時(shí)可以省略,當(dāng)step為1時(shí)可以省略,省略步長(zhǎng)時(shí)還可以同時(shí)省略最后一個(gè)冒號(hào)。當(dāng)step為負(fù)整數(shù)時(shí),表示反向切片,這時(shí)start應(yīng)該在end的右側(cè)才行。列表(1)使用切片獲取列表部分元素使用切片可以返回列表中部分元素組成的新列表。與使用索引作為下標(biāo)訪問(wèn)列表元素的方法不同,切片操作不會(huì)因?yàn)橄聵?biāo)越界而拋出異常,而是簡(jiǎn)單地在列表尾部截?cái)嗷蛘叻祷匾粋€(gè)空列表,代碼具有更強(qiáng)的健壯性。例如:>>>aList=[3,4,5,6,7,9,11,13,15,17]>>>aList[::]#返回包含原列表中所有元素的新列表[3,4,5,6,7,9,11,13,15,17]>>>aList[::-1]#返回包含原列表中所有元素的逆序列表[17,15,13,11,9,7,6,5,4,3]列表>>>aList[::2] #隔一個(gè)取一個(gè),獲取偶數(shù)位置的元素[3,5,7,11,15]>>>aList[1::2] #隔一個(gè)取一個(gè),獲取奇數(shù)位置的元素[4,6,9,13,17]>>>aList[3:6] #指定切片的開(kāi)始和結(jié)束位置[6,7,9]>>>aList[0:100] #切片結(jié)束位置大于列表長(zhǎng)度時(shí),從列表尾部截?cái)郲3,4,5,6,7,9,11,13,15,17]>>>aList[100]#拋出異常,不允許越界訪問(wèn)

IndexError:listindexoutofrange列表>>>aList[100:]#切片開(kāi)始位置大于列表長(zhǎng)度時(shí),返回空列表[]>>>aList[-15:3]#進(jìn)行必要的截?cái)嗵幚韀3,4,5]>>>len(aList)10>>>aList[3:-10:-1]#位置3在位置-10的右側(cè),-1表示反向切片[6,5,4]>>>aList[3:-5]#位置3在位置-5的左側(cè),正向切片[6,7]列表(2)使用切片為列表增加元素可以使用切片操作在列表任意位置插入新元素,不影響列表對(duì)象的內(nèi)存地址,屬于原地操作。例如:>>>aList=[3,5,7]>>>aList[len(aList):][]>>>aList[len(aList):]=[9]#在列表尾部增加元素>>>aList[:0]=[1,2]#在列表頭部插入多個(gè)元素>>>aList[3:3]=[4]#在列表中間位置插入元素>>>aList[1,2,3,4,5,7,9]列表(3)使用切片替換和修改列表中的元素例如:>>>aList=[3,5,7,9]

>>>aList[:3]=[1,2,3]#替換列表元素,等號(hào)兩邊的列表長(zhǎng)度相等>>>aList[1,2,3,9]>>>aList[3:]=[4,5,6]#切片連續(xù),等號(hào)兩邊的列表長(zhǎng)度可以不相等>>>aList[1,2,3,4,5,6]>>>aList[::2]=[0]*3#隔一個(gè)修改一個(gè)>>>aList[0,2,0,4,0,6]列表>>>aList[::2]=['a','b','c']#隔一個(gè)修改一個(gè)>>>aList['a',2,'b',4,'c',6]

>>>aList[1::2]=range(3)#序列解包的用法>>>aList['a',0,'b',1,'c',2]>>>aList[1::2]=map(lambdax:x!=5,range(3))>>>aList['a',True,'b',True,'c',True]

列表>>>aList[1::2]=zip('abc',range(3))#map、filter、zip對(duì)象都支持這樣的用法>>>aList['a',('a',0),'b',('b',1),'c',('c',2)]>>>aList[::2]=[1]#切片不連續(xù)時(shí)等號(hào)兩邊列表長(zhǎng)度必須相等ValueError:attempttoassignsequenceofsize1toextendedsliceofsize3列表(4)使用切片刪除列表中的元素例如:>>>aList=[3,5,7,9]>>>aList[:3]=[]#刪除列表中前3個(gè)元素>>>aList[9]列表也可以結(jié)合使用del命令與切片結(jié)合來(lái)刪除列表中的部分元素,并且切片元素可以不連續(xù)。例如:>>>aList=[3,5,7,9,11]>>>delaList[:3]#切片元素連續(xù)>>>aList[9,11]>>>aList=[3,5,7,9,11]>>>delaList[::2]#切片元素不連續(xù),隔一個(gè)刪一個(gè)>>>aList[5,9]列表練習(xí)1(對(duì)同一個(gè)列表進(jìn)行操作,每一步均有輸出)創(chuàng)建一個(gè)存儲(chǔ)個(gè)人信息的列表,其中包括姓名、學(xué)號(hào)、性別和年齡。輸出個(gè)人信息的姓名和性別并存儲(chǔ)在一個(gè)列表里。向個(gè)人信息的列表里增加身高和體重。(至少采用三種不同的方法)將列表中的年齡刪除。身高和體重填寫(xiě)錯(cuò)誤,對(duì)身高和體重進(jìn)行修改。查詢自己的姓名和學(xué)號(hào)是否在該列表。查詢性別位于該列表的第幾位。列表練習(xí)2已知一個(gè)數(shù)字列表,輸出所有元素中,值為奇數(shù)的元素。S=[1,2,3,4,5,6,7,8,9]練習(xí)3評(píng)委打分系統(tǒng)設(shè)計(jì)。用一個(gè)列表來(lái)保存一個(gè)節(jié)目的所有分?jǐn)?shù),求平均分?jǐn)?shù)(去掉一個(gè)最高分,去掉一個(gè)最低分,求最后得分)。Sum=[9.4,9.9,9.6,9.0,9.6,9.7,9.8,9.5,9.4,9.1]練習(xí)1元組與生成器表達(dá)式元組與生成器表達(dá)式元組簡(jiǎn)述從形式上,元組的所有元素放在一對(duì)圓括號(hào)中,元素之間使用逗號(hào)分隔,如果元組中只有一個(gè)元素則必須在最后增加一個(gè)逗號(hào)。元組與生成器表達(dá)式元組創(chuàng)建與元素訪問(wèn)>>>x=(1,2,3)#直接把元組賦值給一個(gè)變量

>>>type(x)#使用type()函數(shù)查看變量類型<class'tuple’>>>>x[0]#元組支持使用下標(biāo)訪問(wèn)特定位置的元素1>>>x[-1]#最后一個(gè)元素,元組也支持雙向索引3>>>x[1]=4#元組是不可變的

TypeError:'tuple'objectdoesnotsupportitemassignment元組與生成器表達(dá)式

>>>x=(3)#這和x=3是一樣的>>>x3>>>x=(3,)#如果元組中只有一個(gè)元素,必須在后面多寫(xiě)一個(gè)逗號(hào)>>>x(3,)>>>x=()#空元組>>>x=tuple()#空元組>>>tuple(range(5))#將其他迭代對(duì)象轉(zhuǎn)換為元組(0,1,2,3,4)元組與生成器表達(dá)式很多內(nèi)置函數(shù)的返回值也是包含了若干元組的可迭代對(duì)象,例如enumerate()、zip()等等。例如:>>>list(enumerate(range(5)))[(0,0),(1,1),(2,2),(3,3),(4,4)]>>>list(zip(range(3),'abcdefg’))[(0,'a'),(1,'b'),(2,'c')]元組與生成器表達(dá)式元組與列表的異同點(diǎn)列表和元組都屬于有序序列,都支持使用雙向索引訪問(wèn)其中的元素,以及使用count()方法統(tǒng)計(jì)指定元素的出現(xiàn)次數(shù)和index()方法獲取指定元素的首次出現(xiàn)索引,len()、map()、filter()等大量?jī)?nèi)置函數(shù)和+、in等運(yùn)算符也都可以作用于列表和元組。元組屬于不可變(immutable)序列,不可以直接修改元組中元素的值,也無(wú)法為元組增加或刪除元素。元組沒(méi)有提供append()、extend()和insert()等方法,無(wú)法向元組中添加元素;同樣,元組也沒(méi)有remove()和pop()方法,也不支持對(duì)元組元素進(jìn)行del操作,不能從元組中刪除元素,而只能使用del命令刪除整個(gè)元組。zip函數(shù)zip()函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的對(duì)象,好處是節(jié)約了不少的內(nèi)存。如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同。用法:zip([iterable,...])返回迭代器map函數(shù)map()會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射。第一個(gè)參數(shù)function以參數(shù)序列中的每一個(gè)元素調(diào)用function函數(shù),返回包含每次function函數(shù)返回值的迭代器。用法:map(function,iterable,...)filter函數(shù)filter()函數(shù)用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回一個(gè)迭代器對(duì)象。該接收兩個(gè)參數(shù),第一個(gè)為函數(shù),第二個(gè)為序列,序列的每個(gè)元素作為參數(shù)傳遞給函數(shù)進(jìn)行判斷,然后返回True或False,最后將返回True的元素放到迭代器中。filter(function,iterable)元組與生成器表達(dá)式元組也支持切片操作,但是只能通過(guò)切片來(lái)訪問(wèn)元組中的元素,而不允許使用切片來(lái)修改元組中元素的值,也不支持使用切片操作來(lái)為元組增加或刪除元素。Python的內(nèi)部實(shí)現(xiàn)對(duì)元組做了大量?jī)?yōu)化,訪問(wèn)速度比列表更快。如果定義了一系列常量值,主要用途僅是對(duì)它們進(jìn)行遍歷或其他類似用途,而不需要對(duì)其元素進(jìn)行任何修改,那么一般建議使用元組而不用列表。元組在內(nèi)部實(shí)現(xiàn)上不允許修改其元素值,從而使得代碼更加安全,例如調(diào)用函數(shù)時(shí)使用元組傳遞參數(shù)可以防止在函數(shù)中修改元組,而使用列表則很難保證這一點(diǎn)。元組可用作字典的鍵,也可以作為集合的元素。而列表則永遠(yuǎn)都不能當(dāng)作字典鍵使用,也不能作為集合中的元素。元組與生成器表達(dá)式生成器推導(dǎo)式生成器推導(dǎo)式(generatorexpression)的用法與列表推導(dǎo)式非常相似,在形式上生成器推導(dǎo)式使用圓括號(hào)(parentheses)作為定界符,而不是列表推導(dǎo)式所使用的方括號(hào)(squarebrackets)。與列表推導(dǎo)式最大的不同是,生成器推導(dǎo)式的結(jié)果是一個(gè)生成器對(duì)象。生成器對(duì)象類似于迭代器對(duì)象,具有惰性求值的特點(diǎn),只在需要時(shí)生成新元素,比列表推導(dǎo)式具有更高的效率,空間占用非常少,尤其適合大數(shù)據(jù)處理的場(chǎng)合。元組與生成器表達(dá)式使用生成器對(duì)象的元素時(shí),可以根據(jù)需要將其轉(zhuǎn)化為列表或元組,也可以使用生成器對(duì)象的__next__()方法或者內(nèi)置函數(shù)next()進(jìn)行遍歷,或者直接使用for循環(huán)來(lái)遍歷其中的元素。但是不管用哪種方法訪問(wèn)其元素,只能從前往后正向訪問(wèn)每個(gè)元素,沒(méi)有任何方法可以再次訪問(wèn)已訪問(wèn)過(guò)的元素,也不支持使用下標(biāo)訪問(wèn)其中的元素。當(dāng)所有元素訪問(wèn)結(jié)束以后,如果需要重新訪問(wèn)其中的元素,必須重新創(chuàng)建該生成器對(duì)象,enumerate、filter、map、zip等其他迭代器對(duì)象也具有同樣的特點(diǎn)。元組與生成器表達(dá)式使用生成器對(duì)象__next__()方法或內(nèi)置函數(shù)next()進(jìn)行遍歷例如:>>>g=((i+2)**2foriinrange(10))#創(chuàng)建生成器對(duì)象>>>g<generatorobject<genexpr>at0x0000000003095200>>>>tuple(g)#將生成器對(duì)象轉(zhuǎn)換為元組(4,9,16,25,36,49,64,81,100,121)>>>list(g)#生成器對(duì)象已遍歷結(jié)束,沒(méi)有元素了[]>>>g=((i+2)**2foriinrange(10))#重新創(chuàng)建生成器對(duì)象>>>g.__next__()#使用生成器對(duì)象的__next__()方法獲取元素4元組與生成器表達(dá)式>>>g.__next__()#獲取下一個(gè)元素9>>>next(g)#使用函數(shù)next()獲取生成器對(duì)象中的元素16使用for循環(huán)直接迭代生成器對(duì)象中的元素例如:>>>g=((i+2)**2foriinrange(10))>>>foriteming:#使用循環(huán)直接遍歷生成器對(duì)象中的元素

print(item,end='‘)49162536496481100121元組與生成器表達(dá)式訪問(wèn)過(guò)的元素不再存在例如:>>>x=filter(None,range(20))#filter對(duì)象也具有類似的特點(diǎn)

>>>5inxTrue>>>2inx#不可再次訪問(wèn)已訪問(wèn)過(guò)的元素False>>>x=map(str,range(20))#map對(duì)象也具有類似的特點(diǎn)>>>'0'inxTrue>>>'0'inx#不可再次訪問(wèn)已訪問(wèn)過(guò)的元素False字典字典字典簡(jiǎn)述字典(dictionary)是包含若干“鍵:值”元素的無(wú)序可變序列,字典中的每個(gè)元素包含用冒號(hào)分隔開(kāi)的“鍵”和“值”兩部分,表示一種映射或?qū)?yīng)關(guān)系,也稱關(guān)聯(lián)數(shù)組。定義字典時(shí),每個(gè)元素的“鍵”和“值”之間用冒號(hào)分隔,不同元素之間用逗號(hào)分隔,所有的元素放在一對(duì)大括號(hào)“{}”中。字典中元素的“鍵”可以是Python中任意不可變數(shù)據(jù),例如整數(shù)、實(shí)數(shù)、復(fù)數(shù)、字符串、元組等類型等可哈希數(shù)據(jù),但不能使用列表、集合、字典或其他可變類型作為字典的“鍵”。字典中的“鍵”不允許重復(fù),“值”是可以重復(fù)的。字典字典創(chuàng)建使用賦值運(yùn)算符“=”將一個(gè)字典賦值給一個(gè)變量即可創(chuàng)建一個(gè)字典變量。例如:>>>aDict={'server':'','database':'mysql’}也可以使用內(nèi)置類dict以不同形式創(chuàng)建字典。例如:>>>x=dict()#空字典

>>>type(x)#查看對(duì)象類型<class'dict’>>>>x={}#空字典字典

>>>keys=['a','b','c','d’]>>>values=[1,2,3,4]>>>dictionary=dict(zip(keys,values))#根據(jù)已有數(shù)據(jù)創(chuàng)建字典>>>d=dict(name='Dong',age=39)#以關(guān)鍵參數(shù)的形式創(chuàng)建字典>>>aDict=dict.fromkeys(['name','age','sex’])#以給定內(nèi)容為“鍵”,創(chuàng)建“值”為空的字典>>>aDict{'age':None,'name':None,'sex':None}字典字典元素的訪問(wèn)字典中的每個(gè)元素表示一種映射關(guān)系或?qū)?yīng)關(guān)系,根據(jù)提供的“鍵”作為下標(biāo)就可以訪問(wèn)對(duì)應(yīng)的“值”,如果字典中不存在這個(gè)“鍵”會(huì)拋出異常。例如:>>>aDict={'age':39,'score':[98,97],'name':'Dong','sex':'male‘}

>>>aDict['age']#指定的“鍵”存在,返回對(duì)應(yīng)的“值”39>>>aDict['address']#指定的“鍵”不存在,拋出異常KeyError:'address'字典字典對(duì)象提供了一個(gè)get()方法用來(lái)返回指定“鍵”對(duì)應(yīng)的“值”,并且允許指定該鍵不存在時(shí)返回特定的“值”。例如:>>>aDict.get('age')#如果字典中存在該“鍵”則返回對(duì)應(yīng)的“值”39>>>aDict.get('address','NotExists.')#指定的“鍵”不存在時(shí)返回指定的默認(rèn)值'NotExists.'使用字典對(duì)象的items()方法可以返回字典的鍵、值對(duì)。使用字典對(duì)象的keys()方法可以返回字典的鍵。使用字典對(duì)象的values()方法可以返回字典的值。字典元素添加、修改與刪除當(dāng)以指定“鍵”為下標(biāo)為字典元素賦值時(shí),有兩種含義若該“鍵”存在,則表示修改該“鍵”對(duì)應(yīng)的值;若不存在,則表示添加一個(gè)新的“鍵:值”對(duì),也就是添加一個(gè)新元素。例如:>>>aDict={'age':35,'name':'Dong','sex':'male’}>>>aDict['age']=39#修改元素值>>>aDict{'age':39,'name':'Dong','sex':'male’}>>>aDict['address']='SDIBT'#添加新元素>>>aDict{'age':39,'address':'SDIBT','name':'Dong','sex':'male'}字典使用字典對(duì)象的update()方法可以將另一個(gè)字典的“鍵:值”一次性全部添加到當(dāng)前字典對(duì)象,如果兩個(gè)字典中存在相同的“鍵”,則以另一個(gè)字典中的“值”為準(zhǔn)對(duì)當(dāng)前字典進(jìn)行更新。例如:>>>aDict={'age':37,'score':[98,97],'name':'Dong','sex':'male’}>>>aDict.update({‘a(chǎn)’:97,‘a(chǎn)ge’:39})#修改’age’鍵的值,同時(shí)添加新元素’a’:97>>>aDict{'score':[98,97],'sex':'male','a':97,'age':39,'name':'Dong'}字典如果需要?jiǎng)h除字典中指定的元素,可以使用del命令。例如:>>>delaDict['age']#刪除字典元素>>>aDict{'score':[98,97],'sex':'male','a':97,'name':'Dong’}

字典也可以使用字典對(duì)象的pop()和popitem()方法彈出并刪除指定的元素。例如:>>>aDict={'age':37,'score':[98,97],'name':'Dong','sex':'male‘}

>>>aDict.popitem()#彈出一個(gè)元素,對(duì)空字典會(huì)拋出異常('age',37)>>>aDict.pop('sex')#彈出指定鍵對(duì)應(yīng)的元素'male’>>>aDict{'score':[98,97],'name':'Dong'}集合集合集合簡(jiǎn)述集合(set)屬于Python無(wú)序可變序列,使用一對(duì)大括號(hào)作為定界符,元素之間使用逗號(hào)分隔,同一個(gè)集合內(nèi)的每個(gè)元素都是唯一的,元素之間不允許重復(fù)。集合中只能包含數(shù)字、字符串、元組等不可變類型(或者說(shuō)可哈希)的數(shù)據(jù),而不能包含列表、字典、集合等可變類型的數(shù)據(jù)。集合集合對(duì)象的創(chuàng)建與刪除直接將集合賦值給變量即可創(chuàng)建一個(gè)集合對(duì)象。例如:>>>a={3,5}#創(chuàng)建集合對(duì)象使用函數(shù)set()函數(shù)將列表、元組、字符串、range對(duì)象等其他可迭代對(duì)象轉(zhuǎn)換為集合,如果原來(lái)的數(shù)據(jù)中存在重復(fù)元素,則在轉(zhuǎn)換為集合的時(shí)候只保留一個(gè);如果原序列或迭代對(duì)象中有不可哈希的值無(wú)法轉(zhuǎn)換成為集合,拋出異常。例如:>>>a_set=set(range(8,14))#把range對(duì)象轉(zhuǎn)換為集合集合>>>a_set{8,9,10,11,12,13}>>>b_set=set([0,1,2,3,0,1,2,3,7,8])#轉(zhuǎn)換時(shí)自動(dòng)去掉重復(fù)元素>>>b_set{0,1,2,3,7,8}>>>x=set()#空集合集合集合操作與運(yùn)算(1)集合元素增加與刪除add()方法可以增加新元素,如果該元素已存在則忽略該操作,不會(huì)拋出異常update()方法用于合并另外一個(gè)集合中的元素到當(dāng)前集合中,并自動(dòng)去除重復(fù)元素。例如:>>>s={1,2,3} >>>s.add(3)#添加元素,重復(fù)元素自動(dòng)忽略>>>s{1,2,3}>>>s.update({3,4})#更新當(dāng)前字典,自動(dòng)忽略重復(fù)的元素>>>s{1,2,3,4}集合pop()方法用于隨機(jī)刪除并返回集合中的一個(gè)元素,如果集合為空則拋出異常remove()方法用于刪除集合中的元素,如果指定元素不存在則拋出異常discard()用于從集合中刪除一個(gè)特定元素,如果元素不在集合中則忽略該操作clear()方法清空集合刪除所有元素例如:>>>s.discard(5)#刪除元素,不存在則忽略該操作

>>>s{1,2,3,4}>>>s.remove(5)#刪除元素,不存在就拋出異常KeyError:5>>>s.pop()#刪除并返回一個(gè)元素1集合(2)集合運(yùn)算示例:>>>a_set=set([8,9,10,11,12,13])

>>>b_set={0,1,2,3,7,8}>>>a_set|b_set#并集{0,1,2,3,7,8,9,10,11,12,13}>>>a_set.union(b_set)#并集{0,1,2,3,7,8,9,10,11,12,13}>>>a_set&b_set#交集{8}>>>

溫馨提示

  • 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)論