




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章序列結(jié)構(gòu)學(xué)習(xí)目標(biāo)
掌握列表創(chuàng)建,以及列表元素操作掌握元組的創(chuàng)建與刪除,并區(qū)分元組與列表掌握字典的創(chuàng)建,以及字典元素操作掌握集合的創(chuàng)建,以及集合運(yùn)算了解序列運(yùn)算,包括序列解包、序列元素的訪問(wèn)等了解其它序列類型22025/3/63.1列表
列表是Python的內(nèi)置可變序列,采用方括號(hào)[]將相鄰元素分隔開(kāi)。
當(dāng)增加或刪除元素時(shí),列表對(duì)象自動(dòng)進(jìn)行內(nèi)存的擴(kuò)展或收縮,從而保證元素之間沒(méi)有空隙。
但這種自動(dòng)化的內(nèi)存管理可能會(huì)涉及列表中大量的元素移動(dòng),效率較低,因此應(yīng)盡量從列表尾部進(jìn)行元素的添加與刪除操作,提高列表的工作效率。32025/3/63.1.1創(chuàng)建列表
在Python之中,同一個(gè)列表中的元素可以相同也可以不同。
具體的元素可以同時(shí)包含整數(shù)、實(shí)數(shù)、字符串等基本類型,也可以是列表、元組、字典、集合以及其它自定義類型的對(duì)象。
創(chuàng)建列表后,采用賦值運(yùn)算符(=)將結(jié)果賦給變量。42025/3/6>>>lst1=["cat","dog","tiger","1024"]
>>>lst2=[31,32,101.45,"door"]>>>print(lst1,lst2)['cat','dog','tiger','1024'][31,32,101.45,'door']>>>lst3=[1,2,['hello',5]]>>>print(lst3)[1,2,['hello',5]]3.1.1創(chuàng)建列表
也可以通過(guò)list()函數(shù)來(lái)創(chuàng)建列表,將可迭代類型的數(shù)據(jù)轉(zhuǎn)換為列表,包括元組數(shù)據(jù)、range對(duì)象或字符串等。
range()是Python的內(nèi)置函數(shù)
range([start,]stop[,step])
52025/3/6其接收3個(gè)參數(shù):第一個(gè)參數(shù)表示起始值
(默認(rèn)為0)第二個(gè)參數(shù)表示終止值第三個(gè)參數(shù)表示步長(zhǎng)(默認(rèn)為1)>>>list('helloworld')['h','e','l','l','o','','w','o','r','l','d']>>>list()[] >>>range(10)range(0,10)>>>list(range(10))[0,1,2,3,4,5,6,7,8,9]3.1.1創(chuàng)建列表
設(shè)置變量名字時(shí)不應(yīng)與內(nèi)置函數(shù)重名62025/3/6>>>list=list(range(1,5))>>>list[1,2,3,4] #此處list變量工作正常>>>list('helloworld')
#此處的list()函數(shù)無(wú)法工作,因?yàn)樵撁Q被list變量給占用了Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>list('helloworld')TypeError:'list'objectisnotcallable3.1.2列表元素操作
列表元素的添加采用+和*的方式采用+和*的方式在形式上簡(jiǎn)單容易理解,但嚴(yán)格意義上并不是真的為列表添加元素,而是有可能會(huì)被處理為創(chuàng)建一個(gè)新的列表,并將原列表中的元素和新元素依次復(fù)制到新列表的內(nèi)存空間。由于涉及大量元素的復(fù)制,該操作速度較慢,對(duì)于列表元素較多和進(jìn)行大量數(shù)據(jù)操作過(guò)程中從性能的考慮不建議使用該方法。72025/3/6s[下標(biāo)]=d#設(shè)置元素,d為任意值。s
+=
[d] #更新列表
s,將列表
d元素增加到列表
s中。s*=n#更新列表
s,其元素重復(fù)n次。3.1.2列表元素操作采用列表對(duì)象的append()方法82025/3/6lst1=["cat","dog","tiger","1024"]>>>id(lst1) 1714405717512>>>lst1+=['river']>>>id(lst1) #此處沒(méi)有改變變量的內(nèi)存地址1714405717512>>>print(lst1)['cat','dog','tiger','1024','river']>>>y=[] >>>id(y)1714406048840>>>y=y+[4]>>>id(y) #此處改變了變量的內(nèi)存地址1714405834568>>>y=y+[5]>>>id(y) #此處再一次改變了變量的內(nèi)存地址1714406049032>>>y.append(['sky']) >>>id(y) #采用append()方法沒(méi)有改變變量的內(nèi)存地址17144060490323.1.2列表元素操作采用列表對(duì)象的extend()方法append()方法是將所附加的內(nèi)容作為一個(gè)元素來(lái)處理,附加的內(nèi)容是一個(gè)含有多個(gè)元素的列表時(shí),相當(dāng)于將該列表作為一個(gè)元素附加到原有列表的尾部。92025/3/6>>>x=['cat','dog']>>>x+=[5,8]>>>print(x)['cat','dog',5,8]>>>x.append([7,9])>>>print(x)['cat','dog',5,8,[7,9]]>>>x.extend([10,11])>>>print(x)['cat','dog',5,8,[7,9],10,11]3.1.2列表元素操作使用列表對(duì)象的insert(index,object)方法將元素添加到指定位置。
第一個(gè)參數(shù)index表示插入的位置第二個(gè)參數(shù)表示要插入的對(duì)象102025/3/6>>>a=[1,2,3]*3>>>a[1,2,3,1,2,3,1,2,3]>>>a.insert(3,4)>>>a[1,2,3,4,1,2,3,1,2,3]3.1.2列表元素操作
列表元素的刪除可以采用以下三種形式。
使用del命令刪除列表中指定位置的元素。如同一般的變量,del命令也可以刪除整個(gè)列表變量。
使用列表的pop方法刪除并返回指定位置(默認(rèn)為最后一個(gè))上的元素。若指定的索引超出列表的范圍,會(huì)拋出異常。
使用列表的remove()方法刪除首次出現(xiàn)的元素。若沒(méi)有此元素,會(huì)拋出異常。112025/3/6【例3-1】通過(guò)列表刪除的方法找出0-15之間的所有素?cái)?shù)
122025/3/6#方法1,采用remove和delx=list(range(0x10))print('1.',x)foriinx:ifi%2==0:x.remove(i)print('2.',x)j=0while(j<len(x)):if(x[j]%3==0):delx[j]j+=1print('方法1的結(jié)果:',x):【例3-1】通過(guò)列表刪除的方法找出0-15之間的所有素?cái)?shù)
132025/3/6#方法2,采用pop的方式x=list(range(0x10))j=0while(j<len(x)): if(x[j]%2==0orx[j]%3==0): x.pop(j) continue #此處由于刪除一個(gè)元素,等價(jià)于j已經(jīng)指向下一個(gè)元素,所以continue j+=1print('方法2的結(jié)果:',x)方法2的結(jié)果:[1,5,7,11,13]3.2元組
元組是與列表類似的一種序列結(jié)構(gòu),但元組屬于不可變序列。
一旦被創(chuàng)建,元組內(nèi)的元素不可以修改,也無(wú)法添加或刪除元素,若要調(diào)整,只能重新建立元組。142025/3/63.2.1元組的創(chuàng)建與刪除
元組屬于不可變序列。采用圓括號(hào)中用逗號(hào)分隔的方式進(jìn)行定義,圓括號(hào)可以省略。
可用索引訪問(wèn)元組元素。
與列表相同,元組中的元素也可以為基本數(shù)據(jù)類型或者列表、元組等序列類型。
若要?jiǎng)?chuàng)建只包含一個(gè)元素的元組,要在元素后加一個(gè)逗號(hào)。152025/3/63.2.1元組的創(chuàng)建與刪除
采用tuple()函數(shù)將其它類型的序列轉(zhuǎn)換為元組。162025/3/6>>>a=(1,'a',[2,3])>>>a(1,'a',[2,3])>>>a=3>>>a3>>>a=(3)>>>a3>>>a=(3,)>>>a(3,)>>>a=1,2>>>a(1,2)>>>a=3,>>>a(3,)#空元組>>>a=()>>>a()>>>a=tuple()>>>a()>>>a=tuple('')>>>a()#元組與列表的轉(zhuǎn)換>>>a=tuple('abc')>>>a('a','b','c')>>>b=list((1,3,5))>>>b[1,3,5]>>>c=tuple(b)>>>c(1,3,5)3.2.2元組與列表的區(qū)別
元組與列表都是序列類型的一種擴(kuò)展。元組(
tuple)是一組有序系列,包含0個(gè)或多個(gè)對(duì)象引用
元組是不可變的對(duì)象,即不能修改、添加或刪除元組中的元素,但可以通過(guò)索引訪問(wèn)元組中的元素。
像列表一樣,也可以用for循環(huán)來(lái)遍歷元組中的所有值。172025/3/6元組的訪問(wèn)和處理速度比列表更快,如果主要用途是對(duì)元素遍歷或查找,而不需要對(duì)元素進(jìn)行修改,一般建議使用元組而不是列表。另一方面,由于元組的內(nèi)在實(shí)現(xiàn)不允許修改其元素值,從而適用于在一些場(chǎng)合中進(jìn)行數(shù)據(jù)的保護(hù)。>>>dimensions=(200,50)>>>i=0>>>while(i<len(dimensions)): print(dimensions[i]) i+=120050
>>>for
dimension
in
dimensions: print
(dimension)200503.3
字
典
字典是采用鍵值對(duì)的無(wú)序可變序列
其中每個(gè)元素包含兩個(gè)部分:“鍵”和“值”
其中間用冒號(hào)分隔
相鄰元素間用逗號(hào)分隔
而所有元素都放在大括號(hào){}之中。182025/3/63.3.1創(chuàng)建字典
字典是采用鍵值對(duì)的無(wú)序可變序列,其中每個(gè)元素包含兩個(gè)部分,“鍵”和“值”,其中間用冒號(hào)分隔,相鄰元素間用逗號(hào)分隔,而所有元素都放在大括號(hào){}之中。
字典類型提供了根據(jù)鍵值檢索數(shù)據(jù)的能力。其基本形式如下:{<鍵1>:<值1>,<鍵2>:<值2>,..,<鍵n>:<值n>}鍵必須為可hash對(duì)象,因此不可變對(duì)象(bool、int、float、complex、str、tuple、fro-zenset等)可作為鍵;值則可以為任意對(duì)象。字典中的鍵是唯一的,不能重復(fù)。字典中不再采用如列表和元組中的索引值來(lái)獲取元素的值,而是利用元素的鍵值進(jìn)行元素值的訪問(wèn)。192025/3/63.3.1創(chuàng)建字典通過(guò)內(nèi)置的dict()函數(shù)來(lái)創(chuàng)建直接利用大括號(hào){}內(nèi)添加鍵值對(duì)的方式進(jìn)行內(nèi)容的賦值202025/3/6>>>a=dict() #空字典>>>a{}>>>a={}>>>a{}>>>a={'name':'mel','age':25} #利用大括號(hào)創(chuàng)建字典元素>>>a{'name':'mel','age':25}c=dict(name='mel',age=25) #利用dict()函數(shù)入口參數(shù)創(chuàng)建字典>>>c{'name':'mel','age':25}>>>d=dict([('name','mel'),('age',25)])
#通過(guò)dict()函數(shù)以鍵元組和值元組構(gòu)成的列表作為輸入>>>d{'name':'mel','age':25}3.3.1創(chuàng)建字典通過(guò)zip()函數(shù)協(xié)助構(gòu)造字典。zip()函數(shù)的作用是將可迭代對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成多個(gè)元組,然后返回由這些元組組成的對(duì)象。212025/3/6>>>keys=['ftp','telnet','www']>>>values=[21,23,80]>>>d=dict(zip(keys,values))>>>print(d){'ftp':21,'telnet':23,'www':80}3.3.2字典元素操作
通過(guò)鍵key來(lái)作為下標(biāo),訪問(wèn)該下標(biāo)所對(duì)應(yīng)的值。該key所對(duì)應(yīng)的元素不存在訪問(wèn)會(huì)拋出異常。get()方法更為安全,可以獲得指定鍵所對(duì)應(yīng)的值,并且可以在鍵值不存在時(shí)指定一個(gè)該鍵的返回值。不指定則默認(rèn)返回None。pop()方法在獲取指定鍵值的同時(shí),會(huì)刪除原有的字典元素。popitem()方法返回鍵值對(duì)的元組。items()方法返回字典的鍵值對(duì)列表,keys()方法返回字典的鍵列表,values()方法返回字典的值列表。222025/3/63.3.2字典元素操作232025/3/6>>>aDict={'name':'Zhang','sex':'M','age':20}>>>aDict['name']'Zhang'>>>print(aDict['address'])Traceback(mostrecentcalllast):File"<pyshell#90>",line1,in<module>print(aDict['address'])KeyError:'address'>>>print(aDict.get('address'))None>>>print(aDict.get('address','Beijing'))Beijing>>>print(aDict){'name':'Zhang','sex':'M','age':20}>>>aDict['score']=aDict.get('score',[]) >>>aDict['score'].append(90)>>>aDict['score'].append(85)>>>print(aDict){'name':'Zhang','sex':'M','age':20,'score':[90,85]}>>>aDict.pop('tel','缺省電話號(hào)碼')'缺省電話號(hào)碼'【例3-2】利用字典創(chuàng)建一個(gè)用戶信息記錄器
242025/3/6info={}info['name']=input("Pleaseinputname:")info['age']=input("Pleaseinputage:")info['gender']=input("Pleaseinputgender:")forkeyininfo:print(key,info[key])fork,vininfo.items():print("%s,%s"%(k,v))輸出結(jié)果如下:Pleaseinputname:張三Pleaseinputage:24Pleaseinputgender:男name張三age24gender男name,張三age,24gender,男3.3.2字典元素操作
字典對(duì)象的update()方法將另外一個(gè)字典的鍵值對(duì)直接更新到當(dāng)前字典之中。
如果兩個(gè)字典有相同的鍵,則以另外一個(gè)字典內(nèi)該鍵所對(duì)應(yīng)的值更新當(dāng)前字典的值。
此外,字典對(duì)象的clear()方法用于刪除字典中的所有元素,字典對(duì)象的copy()方法用于復(fù)制字典對(duì)象成為一個(gè)新的字典對(duì)象。252025/3/6>>>a={1:'北京',2:'天津',3:'南京'}>>>a.update({3:'上海',4:'廣州'})>>>a{1:'北京',2:'天津',3:'上海',4:'廣州'}3.4
集合
集合屬于無(wú)序可變序列
與字典一樣使用大括號(hào)進(jìn)行構(gòu)建
元素間用逗號(hào)分隔
同一集合內(nèi)的元素不能重復(fù)262025/3/63.4.1創(chuàng)建集合
集合屬于無(wú)序可變序列,與字典一樣使用大括號(hào)進(jìn)行構(gòu)建,元素間用逗號(hào)分隔,且同一集合內(nèi)的元素不能重復(fù)。set()函數(shù)將列表、元組等各類可迭代對(duì)象轉(zhuǎn)換為集合,如果原來(lái)的數(shù)據(jù)中有重復(fù)元素,則轉(zhuǎn)換為集合的時(shí)候會(huì)自動(dòng)進(jìn)行元素的去重。add()方法添加元素。pop()方法可以取出并刪除其中的一個(gè)元素。remove()方法直接刪除指定元素。clear()方法可用于清空集合內(nèi)的所有元素。272025/3/63.4.1創(chuàng)建集合282025/3/6>>>x=set() #空集>>>x=set(range(5,10))>>>x{5,6,7,8,9}>>>a=set(range(5,10))>>>a=frozenset(range(4,8))
#不可變集合,創(chuàng)建后不能添加和刪除元素>>>A=('python',123,'python',123)>>>afrozenset({4,5,6,7})>>>A #Python變量區(qū)分大小寫(xiě),因此a與A是不同變量('python',123,'python',123)>>>b=set([0,1,2,3,0,1,2,4,5])>>>b{0,1,2,3,4,5}>>>b.remove(4)>>>b{0,1,2,3,5}>>>b.add(6)>>>b{0,1,2,3,5,6}>>>b.pop()0>>>b.clear() #清空集合>>>b=set('hello')>>>b{'h','l','e','o'}3.4.2集合運(yùn)算Python集合支持交集、并集、差集、對(duì)稱差集等運(yùn)算,此外還包括集合大小的比較、子集與父集的判斷等。292025/3/6集合運(yùn)算運(yùn)算符集合對(duì)象的方法描述并集a|ba.union(b)交集a&bersection(b)差集a-ba.difference(b)對(duì)稱差集a^ba.symmetric_difference(b)比較大小a<b,a>b,a<=b,a>=b判斷集合的包含關(guān)系,返回布爾值子集a.issubset(b)判斷是否為子集合,返回布爾值父集a.issuperset(b)判斷是否為父集合,返回布爾值【例3-3】從鍵盤任意輸入兩句中文,進(jìn)行集合運(yùn)算302025/3/6a=set(input('第一句話:'))b=set(input('第二句話:'))print('【并集】')print(a|b)print(a.union(b))print('【交集】')foritemina&b:
print(item,end='')
print('\n',ersection(b))print('【差集】')foritemina-b:
print(item,end='')print()
foritemina.difference(b):
print(item,end='')print('\n【對(duì)稱差集】')i=0c=list(a^b)
while(i<len(c)):
print(c[i],end='')
i+=1print()j=0d=list(a.symmetric_difference(b))while(j<len(d)):
print(d[j],end='')
j+=1【例3-3】從鍵盤任意輸入兩句中文,進(jìn)行集合運(yùn)算312025/3/6輸出結(jié)果:第一句話:Python是一種廣泛流傳的編程語(yǔ)言。第二句話:Python語(yǔ)言的文件一般以.py作為擴(kuò)展名。【并集】{'展','傳','y','以','o','n','作','件','P','t','廣','為','p','文','語(yǔ)','言','流','般','編','的','h','名','。','程','擴(kuò)','是','泛','一','.','種'}{'展','傳','y','以','o','n','作','件','P','t','廣','為','p','文','語(yǔ)','言','流','般','編','的','h','名','。','程','擴(kuò)','是','泛','一','.','種'}【交集】語(yǔ)言y的ho。nPt一{'語(yǔ)','言','y','的','h','o','。','n','P','t','一'}【差集】傳流編程是泛廣種傳流編程是泛廣種【對(duì)稱差集】展傳以作件廣為p文流般編名擴(kuò)程是泛.種展傳以作件廣為p文流般編名擴(kuò)程是泛.種3.4.2集合運(yùn)算上例兩種方法:利用循環(huán)直接輸出集合元素將集合先轉(zhuǎn)化為列表再利用循環(huán)輸出列表元素
分別適用于不同的場(chǎng)合,如果從效率來(lái)看,直接利用集合元素進(jìn)行輸出的效率會(huì)更高。
對(duì)于集合大小的比較,主要用于判斷兩個(gè)集合元素的包含關(guān)系。322025/3/6>>>x={1,2,3}>>>y={1,2,3,4}>>>z={2,3,4,5}>>>x<yTrue>>>x<zFalse>>>x.issubset(y)True>>>y.issuperset(x)True3.5
序列運(yùn)算序列解包
元素訪問(wèn)與成員判定
序列切片
序列排序
序列的基本運(yùn)算332025/3/63.5.1序列解包序列打包、解包與多重賦值
函數(shù)或方法返回元組時(shí),將元組中的值賦給變量序列中的變量,這個(gè)過(guò)程就叫做序列解包。
序列打包與序列解包是相反的過(guò)程,首先將序列1,2,3打包到元組values中。342025/3/6>>>
values
=
1,2,3>>>
type(values)<type
'tuple'>>>>
values(1,
2,
3)3.5.1序列解包
要將元組values中的值分別賦給變量序列中的x,y,z則為序列解包。
解包序列中的元素?cái)?shù)量必須和賦值號(hào)(=)左邊變量的數(shù)目完全一樣,否則會(huì)報(bào)錯(cuò)。352025/3/6>>>
x,y,z=values>>>
x,y,z1
2
3>>>
type(x)<type
'int'>
>>>
x,y=valuesTraceback
(most
recent
call
last):
File
"<stdin>",
line
1,
in
<module>
ValueError:
too
many
values
to
unpack>>>
x,y,z,w=values
Traceback
(most
recent
call
last):
File
"<stdin>",
line
1,
in
<module>
ValueError:
need
more
than
3
values
to
unpack3.5.1序列解包
變量的多重賦值實(shí)際上就是元組打包和序列解包的組合,在程序設(shè)計(jì)過(guò)程中的可以利用序列解包功能對(duì)多個(gè)變量同時(shí)進(jìn)行賦值。
序列解包的方法并不限于元組,而是適用于任意序列類型。
只要賦值運(yùn)算符左邊的變量數(shù)目與序列中的元素?cái)?shù)目相等,都可以用這種方法將元素序列解包到另一組變量中。
解包的過(guò)程中可以利用*表達(dá)式獲取單個(gè)變量中的多個(gè)元素,只要它的解釋沒(méi)有歧義即可。*表達(dá)式獲取的值默認(rèn)為list。362025/3/63.5.1序列解包372025/3/6>>>a,b,*c=0,1,2,3 #利用*表達(dá)式獲取剩余部分>>>a0>>>b1>>>c[2,3]>>>a,*b,c=0,1,2,3 #利用*表達(dá)式獲取中間部分>>>a0>>>b[1,2]>>>c3>>>a,b,*c=0,1 #如果左值比右值要多,那么帶*的變量默認(rèn)為空>>>a0>>>b1>>>c[]3.5.1序列解包382025/3/6>>>a,*b,c=0,1>>>a0>>>b[]>>>c1>>>(a,b),(c,d)=(1,2),(3,4) #嵌套解包>>>a,b,c,d(1,2,3,4)【例3-4】字符串'ABCDEFGH',輸出下列格式
假如一個(gè)字符串'ABCDEFGH',要輸出下列格式:
采用序列解包的方式求解。392025/3/6A['B','C','D','E','F','G','H']B['C','D','E','F','G','H']C['D','E','F','G','H']D['E','F','G','H']E['F','G','H']
F['G','H']G['H']H[]s='ABCDEFGH'whiles: x,*s=s print(x,s)3.5.1序列解包多種結(jié)構(gòu)的序列解包
除了基本的元組、列表、字典等序列結(jié)構(gòu)外,符合序列化特征的各類結(jié)構(gòu)和用法也可以進(jìn)行序列解包,如range對(duì)象、迭代對(duì)象。元組的序列解包402025/3/6x,y,z=(1,2,3)print(x,y,z)123a_tuple=4,5,6#(4,5,6)(x,y,z)=a_tupleprint(x,y,z)4563.5.1序列解包列表的序列解包range對(duì)象的序列解包字典的序列解包412025/3/6x_list=[1,2,3,4,5,6,7]x0,x1,x2,x3,x4,x5,x6=x_listx56x,y,z=sorted([7,32,5]) #利用sorted()函數(shù)對(duì)列表進(jìn)行排序print(x,y,z)5732x,y,z,m,n=range(5)print(x,y,z,m,n)01234dict1={'a':1,'b':2,'c':3}b,c,d=dict1.items()print(b,c,d)('a',1)('b',2)('c',3)b,c,d=dict1b,c,d('a','b','c')b,c,d=dict1.values()b,c,d(1,2,3)3.5.1序列解包序列遍歷與組合for循環(huán)可以對(duì)解包的序列中各元素進(jìn)行遍歷。
對(duì)多個(gè)序列的對(duì)應(yīng)元素進(jìn)行綁定,可以采用zip()函數(shù)。zip()函數(shù)用于將可迭代對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成若干元組,然后返回由這些元組組成的對(duì)象。422025/3/6【例3-5】遍歷并格式化輸出字典元素432025/3/6dict2={'a':1,'b':2,'c':3}fork,vindict2.items():print(k,v)輸出如下:a1b2c3【例3-6】輸出兩個(gè)列表的對(duì)應(yīng)元素為以下形式
輸出兩個(gè)列表的對(duì)應(yīng)元素['x1','x2','x3','x4'],[23,123,543,765]為以下形式:enumerate()函數(shù)是一個(gè)與zip()函數(shù)類似的內(nèi)置函數(shù),用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo)。442025/3/6x1對(duì)應(yīng)數(shù)字23x2對(duì)應(yīng)數(shù)字123x3對(duì)應(yīng)數(shù)字543x4對(duì)應(yīng)數(shù)字765keys=['x1','x2','x3','x4']values=[23,123,543,765]fork,vinzip(keys,values):print("%s對(duì)應(yīng)數(shù)字%d"%(k,v))【例3-7】按對(duì)列表中的元素以下格式輸出
對(duì)列表['a','b','c']中的元素按以下格式輸出
此外,采用序列解包可以靈活方便地實(shí)現(xiàn)所期望的輸出形式,特別是對(duì)于*的運(yùn)用。452025/3/6索引0和x的元素a索引1和x的元素b索引2和x的元素cx=['a','b','c']forindex,x_valueinenumerate(x):print('索引{0}和x的元素{1}'.format(index,x_value))3.5.1序列解包
序列解包的其它用法
與zip相反,利用*號(hào)操作符可以將組合的對(duì)象序列進(jìn)行序列化拆分。462025/3/6>>>print(*[1,2,3,4],5,*(6,7))1234567>>>*range(4),4(0,1,2,3,4)>>>{*range(3),3,4,*(5,6,7)}{0,1,2,3,4,5,6,7}>>>{'x':1,**{'y':2}}{'x':1,'y':2}>>>a=[1,2,3]>>>b=[4,5,6]>>>c=[4,5,6,7,8]>>>zipped=zip(a,b)>>>list(zipped)[(1,4),(2,5),(3,6)]>>>list(zip(a,c))[(1,4),(2,5),(3,6)]>>>zipped=zip(a,b)>>>list(zip(*zipped))[(1,2,3),(4,5,6)]>>>v1={1:11,2:22}>>>v2={3:33,4:44}>>>v3={5:55,6:66}>>>v=zip(v1,v2,v3)>>>print(list(v))[(1,3,5),(2,4,6)]>>>w=zip(*zip(v1,v2,v3))>>>print(list(w))[(1,2),(3,4),(5,6)]【例3-8】求兩個(gè)列表中對(duì)應(yīng)元素的積和商472025/3/6list1=[2,3,4]list2=[4,5,6]forx,yinzip(list1,list2):print("%d*%d=%d"%(x,y,x*y))forx,yinzip(list1,list2):print("%d/%d=%.1f"%(x,y,x/y))結(jié)果:2*4=83*5=154*6=242/4=0.53/5=0.64/6=0.73.5.2序列元素訪問(wèn)與成員判定序列元素訪問(wèn)與計(jì)數(shù)
列表和元組等有序序列可以采用數(shù)字下標(biāo)加中括號(hào)的方式訪問(wèn)序列元素。
可以采用該序列對(duì)象的index()方法獲取元素下標(biāo)。語(yǔ)法:index(value,[start,[stop]])其中start和stop為指定的搜索范圍start默認(rèn)為0stop默認(rèn)為列表的長(zhǎng)度若序列對(duì)象中不存在指定元素,則拋出異常提示列表不存在該值。
而序列對(duì)象的count()方法則用于統(tǒng)計(jì)某元素值在序列中出現(xiàn)的次數(shù)。482025/3/63.5.2序列元素訪問(wèn)與成員判定
采用下標(biāo)方式進(jìn)行元素訪問(wèn)允許下標(biāo)為負(fù)數(shù),此時(shí)將從尾部開(kāi)始計(jì)算。index()方法中的索引必須為大于等于0的數(shù)字。492025/3/6>>>a=[3,4,5,6,7,4]>>>a[2]5>>>a.index(4)1>>>a.count(4)2>>>b=(3,4,5,6,7,4)>>>b.index(5)2>>>b.count(4)2>>>b[3]6>>>b.count(8)0>>>a=[3,4,5,6,7,4]>>>print(a[0],a[-1],a[-2])347>>>b='bcdefg'>>>b[0]'b'>>>b[len(b)-1]'g'>>>b[-1]'g'3.5.2序列元素訪問(wèn)與成員判定
這些方法同樣適用于range()對(duì)象、字符串等其它各類有序序列。
滿足有序的條件即可采用序列化的元素訪問(wèn)和元素計(jì)數(shù)方法。502025/3/6>>>range(10)[3]3>>>range(10).index(5)5>>>'abcdefabc'[3]'d'>>>'abcdefabc'.index('c')2>>>'abcdefabc'.count('a')23.5.2序列元素訪問(wèn)與成員判定序列元素成員資格判定
序列元素的成員資格判定方法采用成員運(yùn)算符in或notin判斷語(yǔ)句進(jìn)行
適用于列表、元組、字典、集合,或者是range對(duì)象、字符串等可迭代對(duì)象
具體判定的時(shí)候,需要注意in或notin用于判斷一個(gè)元素x是否存在于序列之中512025/3/63.5.2序列元素訪問(wèn)與成員判定522025/3/6>>>my_dict={'子':'鼠','丑':'牛','寅':'虎','卯':'兔','辰':'龍','巳':'蛇', '午':'馬','未':'羊','申':'猴','酉':'雞','戌':'狗','亥':'豬'}>>>'鼠雞'inmy_dict.values()False>>>'鼠'inmy_dict.values()True>>>'鼠雞'notinmy_dict.values()True>>>alist=[3,4,5,6,7,8,9,10,11]>>>8inalistTrue>>>blist=[[3],[4],[5]]>>>4inblistFalse>>>[4]inblistTrue>>>s='Good,better,best'>>>'o'insTrue>>>'ood'insTrue>>>'g'notinsTrue3.5.3序列切片
切片可用于對(duì)列表、元組、字符串等順序化序列結(jié)構(gòu)中數(shù)據(jù)的區(qū)間式截取。
切片操作的基本形式為:
s[i:j]
或
s[i:j:k]i為開(kāi)始下標(biāo)(包含s[i])j為結(jié)束下標(biāo)(不包含s[j])k為步長(zhǎng)
如果省略i,則從下標(biāo)0開(kāi)始;
如果省略j,則直到結(jié)束為止;
如果省略k,則步長(zhǎng)為1。
若步長(zhǎng)為負(fù)數(shù),則逆序排列元素。
如果截取范圍內(nèi)沒(méi)有數(shù)據(jù),則返回空元組;
如果超過(guò)下標(biāo)范圍不報(bào)錯(cuò)。532025/3/63.5.3序列切片542025/3/6>>>s='abcdef'>>>print(s[-1],s[-2],s[1:3])febc>>>s[:]'abcdef'>>>s[::2]'ace'>>>s[::-1]'fedcba'>>>s[1:-1]'bcde'>>>t=(1,3,5,7,9)>>>t[:2](1,3)>>>t[1:-1](3,5,7)>>>'helloworld'[-1]'d'>>>'helloworld'[:-1]'helloworl'3.5.3序列切片
原地修改列表內(nèi)容,列表元素的增、刪、改、查以及元素替換等操作都可以通過(guò)切片來(lái)實(shí)現(xiàn)552025/3/6>>>a=[3,5,7]>>>a[len(a):][]>>>a[len(a):]=[9,11]>>>a[3,5,7,9,11]>>>a[:2]=[1,2,4,6]>>>a[1,2,4,6,7,9,11]>>>a[:3]=[]
#切片替換>>>a[6,7,9,11]>>>b=list(range(10))>>>b[::2]=[0]*(len(b)//2) #len(b)//2個(gè)元素0構(gòu)成的列表>>>b[0,1,0,3,0,5,0,7,0,9]>>>delb[1:4] #del配合切片操作實(shí)現(xiàn)對(duì)列表元素的區(qū)間刪除>>>b[0,0,5,0,7,0,9]3.5.3序列切片
切片操作返回的是原有對(duì)象的淺拷貝
經(jīng)過(guò)切片的數(shù)據(jù),仍然是將原有的對(duì)象復(fù)制到了新的空間,而不同于簡(jiǎn)單的對(duì)象賦值操作562025/3/6>>>a=[3,5,7,9]>>>id(a)1921776184968>>>b=a[:]>>>id(b) #通過(guò)切片的淺拷貝創(chuàng)建出新的內(nèi)存1921776244360>>>a==bTrue>>>c=a #賦值操作僅僅增加了對(duì)象的引用>>>id(c) #c只是原有a所指向?qū)ο蟮囊?921776184968>>>t=(1,3,5,7,9)>>>t[:2](1,3)>>>cisaTrue>>>bisaFalse3.5.4序列排序
列表結(jié)構(gòu)具有對(duì)象自身提供的sort()方法進(jìn)行原地排序,即這種排序是永久性排序,將會(huì)按照順序改變列表中元素的次序。
若要按與字母順序相反的順序排列列表元素,只需向sort()方法傳遞參數(shù)
reverse=True572025/3/6>>>cars=['bmw','audi','toyota','subaru']>>>cars.sort()>>>print(cars) #改變了列表中元素的順序['audi','bmw','subaru','toyota']>>>cars.sort(reverse=True)>>>print(cars) #改變了列表中元素的順序['toyota','subaru','bmw','audi']3.5.4序列排序
要保留列表元素原來(lái)的排列順序,同吋以特定的順序呈現(xiàn)它,可使用函數(shù)sorted()
函數(shù)sorted()讓你能夠按特定順序顯示列表元素,同吋不影呵它在列表中的原始排序582025/3/6>>>cars=['bmw','audi','toyota','subaru']>>>sorted(cars)['audi','bmw','subaru','toyota']>>>print(cars) #并沒(méi)有實(shí)際改變列表中元素的順序['bmw','audi','toyota','subaru']3.5.4序列排序
內(nèi)置函數(shù)sorted(iterable,
key
=
None,
reverse
=
False)返回系列的排序列表
其中key
是用于計(jì)算比較鍵值的函數(shù)(帶1個(gè)參數(shù))
例如key
=
str.
Lower表示先將字符轉(zhuǎn)換為小寫(xiě)再做比較。592025/3/6>>>s1='axd'>>>sorted(s1)['a','d','x']>>>s2=(1,4,2)>>>sorted(s2)[1,2,4]>>>sorted(s2,reverse=True)[4,2,1]>>>s3='abAC'>>>sorted(s3,key=str.lower)['','','a','A','b','C']3.5.5序列的基本運(yùn)算大小比較
當(dāng)兩個(gè)列表或元組比較大小時(shí),從第一個(gè)元素順序開(kāi)始比較,如果相等則繼續(xù)。
返回第一個(gè)不相等元素比較的結(jié)果。
如果所有元素比較均相等,則長(zhǎng)的列表大,一樣長(zhǎng)則兩列表相等。602025/3/6>>>a=[1,2,3]>>>b=[1,3,5]>>>c=[1,2,3,-1]>>>print(a<b,a<c,b<c)TrueTrueFalse>>>d=(1,2,3)>>>e=(1,3,5)>>>f=(1,2,3,-1)>>>print(d>e,d>f,e>f)FalseFalseTrue
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中專升大專的試題及答案
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職教育學(xué)題庫(kù)綜合試卷A卷附答案
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能考前沖刺試卷A卷含答案
- 2022-2023學(xué)年廣東省廣州二中教育集團(tuán)七年級(jí)(下)期中數(shù)學(xué)試卷(含答案)
- 遺產(chǎn)繼承遺產(chǎn)分配爭(zhēng)議解決合同(2篇)
- 采購(gòu)與分包責(zé)任劃分合同(2篇)
- 2023年云南公務(wù)員《行政職業(yè)能力測(cè)驗(yàn)》試題真題及答案
- 奢侈品知識(shí)培訓(xùn)課件圖片
- 2025年法律知識(shí)競(jìng)賽搶答題庫(kù)及答案(共70題)
- 急診科急救知識(shí)培訓(xùn)課件
- 2025年中考百日誓師大會(huì)校長(zhǎng)發(fā)言稿:激揚(yáng)青春志 決勝中考時(shí)
- YY/T 1860.1-2024無(wú)源外科植入物植入物涂層第1部分:通用要求
- 中央2025年全國(guó)婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫(kù)附帶答案詳解
- 人教版高中物理選擇性必修第二冊(cè)電磁波的發(fā)射與接收課件
- 《建筑冷熱源》全冊(cè)配套最完整課件1
- 廣州2025年廣東廣州市番禺區(qū)小谷圍街道辦事處下屬事業(yè)單位招聘5人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年春新人教版生物七年級(jí)下冊(cè)全冊(cè)教學(xué)課件
- 【物理】《跨學(xué)科實(shí)踐:制作微型密度計(jì)》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教版(2024)初中物理八年級(jí)下冊(cè)
- 封條模板A4直接打印版
- 義務(wù)教育《地理》課程標(biāo)準(zhǔn)(2022年版)
- 單細(xì)胞蛋白論文
評(píng)論
0/150
提交評(píng)論