《Python語言基礎(chǔ)及應(yīng)用》 課件 江曉林 第3、4章 復(fù)合數(shù)據(jù)類型、結(jié)構(gòu)體_第1頁
《Python語言基礎(chǔ)及應(yīng)用》 課件 江曉林 第3、4章 復(fù)合數(shù)據(jù)類型、結(jié)構(gòu)體_第2頁
《Python語言基礎(chǔ)及應(yīng)用》 課件 江曉林 第3、4章 復(fù)合數(shù)據(jù)類型、結(jié)構(gòu)體_第3頁
《Python語言基礎(chǔ)及應(yīng)用》 課件 江曉林 第3、4章 復(fù)合數(shù)據(jù)類型、結(jié)構(gòu)體_第4頁
《Python語言基礎(chǔ)及應(yīng)用》 課件 江曉林 第3、4章 復(fù)合數(shù)據(jù)類型、結(jié)構(gòu)體_第5頁
已閱讀5頁,還剩150頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章復(fù)合數(shù)據(jù)類型序列類型引言列表元組字符串通用操作文件Python支持組合數(shù)據(jù)類型,可以將一批數(shù)據(jù)作為一個整體進行數(shù)據(jù)操作,這就是數(shù)據(jù)容器的概念。序列是容器(集合)中包含多個數(shù)據(jù)(元素),容器中的數(shù)據(jù)(元素)有先后次序,通過下標(biāo)(索引)進行訪問。引言序列類型組合數(shù)據(jù)類型列表列表(list)是序列類型的一種,由0或多個有序排列的元素組成,序列所有的特性和操作對于列表都成立。列表的格式為:[元素,元素,……,元素]02使用方括號“[]”創(chuàng)建列表,可以是空列表或包含多個項的列表。直接創(chuàng)建使用簡潔的語法創(chuàng)建列表,常用于創(chuàng)建空列表或包含單個元素的列表。列表解析式創(chuàng)建列表#創(chuàng)建一個空列表>>>a=[]#創(chuàng)建一個內(nèi)置元素的列表>>>b=[2,3,5,7,11,13]#單變量列表解析>>>print([iforiinrange(6)])[0,1,2,3,4,5]#多變量列表解析>>>a=[[5*i,5*i+1,5*i+2,5*i+3,5*i+4]foriinrange(5)]>>>a[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24]]將其他數(shù)據(jù)類型轉(zhuǎn)換成列表,最多接收一個參數(shù)。使用`list()`函數(shù)逐個添加元素到列表末尾,是列表中元素的一種添加方式。用`append`方法創(chuàng)建列表>>>a=list('hello')>>>a['h','e','l','l','o']>>>b=list()>>>b[]>>>list(range(1,10,2))[1,3,5,7,9]lst=[]foriinrange(4): lst.append(input('請輸入元素:'))print(lst)輸出:請輸入元素:1請輸入元素:2請輸入元素:3請輸入元素:4['1','2','3','4']訪問元素通過索引訪問列表元素,索引從0開始,可以像訪問字典中的值一樣使用。修改元素類似訪問元素的語法,通過索引修改列表元素的值,但無法直接刪除或添加元素。添加元素使用`append`、`extend`、`insert`、使用`+`號等方法添加新元素。列表操作>>>names=['Lily','Lucy','May']>>>print(names[0])Lily>>>print(names[1])Lucy>>>print(names[2])May>>>a=[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24]]>>>a[0][0]0>>>a[1][0]5>>>a[0][1]1>>>a[4][4]24訪問元素通過索引訪問列表元素,索引從0開始,可以像訪問字典中的值一樣使用。修改元素類似訪問元素的語法,通過索引修改列表元素的值,但無法直接刪除或添加元素。添加元素使用`append`、`extend`、`insert`、使用`+`號等方法添加新元素。列表操作>>>a=[1,3,5,7,11]>>>print(a)[1,3,5,7,11]>>>a[0]=2>>>print(a)[2,3,5,7,11]訪問元素通過索引訪問列表元素,索引從0開始,可以像訪問字典中的值一樣使用。修改元素類似訪問元素的語法,通過索引修改列表元素的值,但無法直接刪除或添加元素。添加元素使用`append`、`extend`、`insert`、使用`+`號等方法添加新元素。列表操作>>>names=['Lily','Lucy','May']>>>print(names)['Lily','Lucy','May']>>>names.append('Anna')>>>print(names)['Lily','Lucy','May','Anna']>>>a=[1,2]>>>b=[3,4]>>>c=[1,2]#追加新對象>>>a.append(b)>>>print(a)[1,2,[3,4]]#追加新元素序列>>>c.extend(b)>>>print(c)[1,2,3,4]訪問元素通過索引訪問列表元素,索引從0開始,可以像訪問字典中的值一樣使用。修改元素類似訪問元素的語法,通過索引修改列表元素的值,但無法直接刪除或添加元素。添加元素使用`append`、`extend`、`insert`、使用`+`號等方法添加新元素。列表操作>>>a=[1,2]>>>b={'Lily':20,'Lucy':22} #字典>>>c=[1,2]>>>a.extend(b)>>>print(a)[1,2,'Lily','Lucy']>>>c.append(b)>>>print(c)[1,2,{'Lily':20,'Lucy':22}]#把新元素Eda放到目前的第1位元素Lily之前>>>names=['Lily','Lucy','May']>>>names.insert(0,'Eda')>>>print(names)['Eda','Lily','Lucy','May']#把新元素Mia放到目前的第2位元素Lily之前>>>names.insert(1,'Mia')>>>print(names)['Eda','Mia','Lily','Lucy','May']訪問元素通過索引訪問列表元素,索引從0開始,可以像訪問字典中的值一樣使用。修改元素類似訪問元素的語法,通過索引修改列表元素的值,但無法直接刪除或添加元素。添加元素使用`append`、`extend`、`insert`、使用`+`號等方法添加新元素。列表操作#把新元素Eda放到目前的最后一個元素May之前>>>names=['Lily','Lucy','May']>>>names.insert(-1,'Eda')>>>print(names)['Lily','Lucy','Eda','May']#正索引值超過列表長度的有效范圍>>>names=['Lily','Lucy','May']>>>names.insert(5,'Eda')>>>print(names)['Lily','Lucy','May','Eda']#負索引值超過列表長度的有效范圍>>>names.insert(-5,'Eda')>>>print(names)['Mia','Lily','Lucy','May','Eda']>>>names=['Lily','Lucy','May']>>>names.insert(1.5,'Eda')TypeError:integerargumentexpected,gotfloat訪問元素通過索引訪問列表元素,索引從0開始,可以像訪問字典中的值一樣使用。修改元素類似訪問元素的語法,通過索引修改列表元素的值,但無法直接刪除或添加元素。添加元素使用`append`、`extend`、`insert`、使用`+`號等方法添加新元素。列表操作>>>a=[1,2]>>>c=[1,2]>>>b=a+c>>>print(b)[1,2,1,2]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>names=['Lily','Lucy','May']>>>print(names)['Lily','Lucy','May']#使用正數(shù)索引>>>delnames[2]>>>print(names)['Lily','Lucy']#使用負數(shù)索引>>>delnames[-1]>>>print(names)['Lily']#刪除整個列表>>>delnames>>>print(names)NameError:name'names'isnotdefined刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>names=['Mia','Lily','Lucy','May','Eda']>>>print(names)['Mia','Lily','Lucy','May','Eda']#使用正數(shù)索引,刪去索引值為2的元素>>>delnames[2:3]>>>print(names)['Mia','Lily','May','Eda']#使用負數(shù)索引,刪去索引值為-3、-2的元素>>>delnames[-3:-1]>>>print(names)['Mia','Eda']刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>names=['Mia','Lily','Lucy','May','Eda']>>>print(names)['Mia','Lily','Lucy','May','Eda']#使用正數(shù)索引,刪去索引值為2的元素>>>delnames[2:3]>>>print(names)['Mia','Lily','May','Eda']#使用負數(shù)索引,刪去索引值為-3、-2的元素>>>delnames[-3:-1]>>>print(names)['Mia','Eda']刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>names=['Mia','Lily','Lucy','May','Eda']>>>print(names)['Mia','Lily','Lucy','May','Eda']>>>names.pop(3)>>>print(names)['Mia','Lily','Lucy','Eda']>>>names.pop()>>>print(names)['Mia','Lily','Lucy']刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>names=['Mia','Lily','Lucy','Mia','Eda']>>>print(names)['Mia','Lily','Lucy','Mia','Eda']>>>names.remove('Mia')>>>print(names)['Lily','Lucy','Mia','Eda']>>>names.remove('Mia')>>>print(names)['Lily','Lucy','Eda']>>>names.remove('Mia')ValueError:list.remove(x):xnotinlist刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>names=['Mia','Lily','Lucy','May','Eda']>>>print(names)['Mia','Lily','Lucy','May','Eda']>>>names.clear()>>>print(names)[]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作#例1>>>a=[1,2]>>>b=a>>>print('a=',a,'b=',b)a=[1,2]b=[1,2]>>>b[0]=-1>>>print('a=',a,'b=',b)a=[-1,2]b=[-1,2]#例2>>>a=[1,2]>>>c=a[:]>>>print('a=',a,'c=',c)a=[1,2]c=[1,2]>>>c[0]=-1>>>print('a=',a,'c=',c)a=[1,2]c=[-1,2]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l=[1,2,3,4,5,6]>>>l1=l[1:4:1] #取1,2,3>>>l1[2,3,4]>>>l2=l[-5:-1:1] #取-5,-4,-3,-2>>>l2[2,3,4,5]>>>l3=l[1:-1:1] #取除0,-1外的所有>>>l3[2,3,4,5]>>>l4=l[-5:5:1] #統(tǒng)一正負兩種索引,后判斷>>>l4[2,3,4,5]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l=[1,2,3,4,5,6]>>>l5=l[5:1:-1] #取5,4,3,2>>>l5[6,5,4,3]

>>>l6=l[-1:-5:-1] #取-1,-2,-3,-4>>>l6[6,5,4,3]

>>>l7=l[5:-5:-1] #統(tǒng)一正負兩種索引,后判斷>>>l7[6,5,4,3]

>>>l8=l[-1:1:-1] #取除0,1外的所有>>>l8[6,5,4,3]

刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l=[1,2,3,4,5,6]>>>l9=l[1::1] #取1及之后的所有>>>l9[2,3,4,5,6]>>>l10=l[:5:1] #取0,1,2,3,4>>>l10[1,2,3,4,5]>>>l11=l[1:5] #取1,2,3,4>>>l11[2,3,4,5]>>>l12=l[1::-1] #取1,0>>>l12[2,1]

>>>l13=l[:-1:-1] #取直范圍的方向與步長方向不一致>>>l13[]

刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l=[1,2,3,4,5,6]>>>l14=l[1+1:11//2:1*2]>>>l14[3,5]

>>>l=list(range(10))>>>l[0,1,2,3,4,5,6,7,8,9]>>>l[2:5]=[20,30]>>>l[0,1,20,30,5,6,7,8,9]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l[3::2]=[11,22]>>>lValueError:attempttoassignsequenceofsize2toextendedsliceofsize3>>>l[3::3]=[11,22]>>>l[0,1,20,11,5,6,22,8,9]>>>dell[5:7]>>>l[0,1,20,11,5,8,9]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l[2:5]=100TypeError:canonlyassignaniterable>>>l[2:5]=[100]>>>l[0,1,100,8,9]>>>l[len(l):]=[4,5]>>>l[0,1,100,8,9,4,5]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l=[1,4,2,9,7,8,9,3,1]>>>x=l.count(9)>>>print(x)2>>>l=[1,4,2,9,7,8,9,3,1]>>>x=l.copy>>>print(x)[1,4,2,9,7,8,9,3,1]

>>>x[0]=0>>>print(x)[0,4,2,9,7,8,9,3,1]

>>>print(l)[1,4,2,9,7,8,9,3,1]

刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>l=[4,55,64,32,16,32]>>>x=l.index(32)>>>print(x)3>>>y=l.index(32,2)>>>print(y)3>>>z=l.index(32,2,3)ValueError:32isnotinlist>>>a=[1,1,5,7,11]>>>a.reverse()>>>a[11,7,5,1,1]刪除元素使用`del`、`pop`、`remove`、`clear`等方法刪除列表中的元素。切片賦值通過切片對列表進行賦值,實現(xiàn)嫁接、切除或就地修改操作。其他列表操作count、copy、index、reverse、sort等方法或函數(shù)。列表操作>>>b=[5,3,1,11,7]>>>b.sort()>>>b[1,3,5,7,11]>>>b.sort(reverse=True)>>>b[11,7,5,3,1]>>>defmyFunc(e):returnlen(e)>>>cars=['Ford','Mitsubishi','BMW','VW']>>>cars.sort(key=myFunc)>>>print(cars)['VW','BMW','Ford','Mitsubishi']列表操作列表內(nèi)置方法解釋L.append(x)在列表L后面增加一個元素xL.clear()移除列表L的所有元素L.count(x)計算列表L中x出現(xiàn)的次數(shù)L.copy()列表L的備份L.extend(x)把另一個列表X的內(nèi)容添加到列表L的后面L.index(value[,start[,stop]])計算在指定范圍[start,stop)內(nèi)首個出現(xiàn)的value的下標(biāo)L.insert(index,x)在下標(biāo)index的位置插入xL.pop(index)刪除并返回列表中指定下標(biāo)(位置)的數(shù)據(jù),如果下標(biāo)不指定,則刪除最后一項。L.remove(value)刪除值為value的第一個元素;若要刪除的元素不在列表中,會報錯L.reverse()倒置列表LL.sort(reverse=True|False,key=myFunc)對列表元素排序:reverse=True將對列表進行降序排序。默認(rèn)值為reverse=False;key用于指定排序標(biāo)準(zhǔn)的函數(shù)將兩個列表相加,得到一個新的列表,這是最直接的方法。列表相加使用`append`方法將元素添加到列表末尾,是列表中元素的一種添加方式。append方法使用`insert`方法在指定位置插入新元素,可以像在字典中那樣使用。insert方法使用簡潔的語法創(chuàng)建列表,常用于創(chuàng)建空列表或包含單個元素的列表。列表解析式列表創(chuàng)建方法效率比較列表創(chuàng)建方法效率比較涉及兩種新模塊time模塊和random模塊time模塊用于計時,random模塊用于生成隨機的元素值在Python中經(jīng)常需要對程序運行時間進行掌控,一般使用time模塊進行計時。time()是一個時間戳,記錄從1970年到當(dāng)下經(jīng)過的秒數(shù)。通過比較列表建立開始前和結(jié)束時的時間戳獲取時間差,就能確定程序運行時間random模塊實現(xiàn)了各種分布的偽隨機數(shù)生成器,所謂偽隨機數(shù),即人類使用算法等方式,以一個基準(zhǔn)(也被叫做種子,最常用的就是時間戳)來構(gòu)造一系列數(shù)字,這些數(shù)字的特征符合人們所理解的隨機數(shù)。但因為是通過算法得到的,所以一旦算法和種子都確定,那么產(chǎn)生的隨機數(shù)序列也是確定的,所以叫偽隨機數(shù)。一般默認(rèn)以系統(tǒng)時間為種子fromtimeimporttimefromrandomimportrandom列表創(chuàng)建方法效率比較start=time()lst=[]foriinrange(100000): lst=lst+[random()]print("addtest",str(time()-start)+"s")#用時(現(xiàn)在時間-初始時間)

輸出:addtest11.105808019638062sstart=time()lst=[]foriinrange(100000):lst.append(random())print("appendtest",str(time()-start)+"s")

輸出:appendtest0.013904333114624023sstart=time()lst=[]foriinrange(100000):lst.insert(0,random())print(”inserttest",str(time()-start)+"s")

輸出:inserttest1.6723971366882324sstart=time()lst=[random()foriinrange(100000)]print("listexptest",str(time()-start)+"s")

輸出:listexptest0.007883071899414062s列表解析式

>append方法

>insert方法

>列表相加元組0303元組推導(dǎo)式利用推導(dǎo)式生成元組,可以延遲生成元素。01直接創(chuàng)建使用括號直接創(chuàng)建一個元組,可以是空元組或包含多個元素的元組。02使用`tuple()`函數(shù)將其他序列類型轉(zhuǎn)換成元組。創(chuàng)建元組>>>a=()>>>b=(100,20)>>>type(b)tuple

>>>c=100,20>>>type(c)tuple

>>>d=(1,)>>>type(d)tuple>>>f=(1)>>>type(f)int

>>>e=1,>>>type(e)tuple

03元組推導(dǎo)式利用推導(dǎo)式生成元組,可以延遲生成元素。01直接創(chuàng)建使用括號直接創(chuàng)建一個元組,可以是空元組或包含多個元素的元組。02使用`tuple()`函數(shù)將其他序列類型轉(zhuǎn)換成元組。創(chuàng)建元組>>>a=tuple([2,3,5,7,11])>>>type(a)tuple

>>>tup=(valueforvalueinrange(1,5))>>>print(tup)<generatorobject<genexpr>at0x113e5c2e0>>>>foriintup: print(i)1234元組中的元素?zé)o法進行增加、刪除、修改或排序操作,只能重新賦值創(chuàng)建新的元組。元組不可修改01元組操作>>>a=(2,3,5,7,11)>>>print(a)(2,3,5,7,11)>>>a=(1,2)>>>print(a)(1,2)>>>a=(2,3,5,7,11) >>>b=(1,2)>>>print(a+b)(2,3,5,7,11,1,2)

>>>a=(2,3,5,7,11) >>>dela[1]TypeError:'tuple'objectdoesn'tsupportitemdeletion>>>dela>>>aNameError:name'a'isnotdefined元組中的元素?zé)o法進行增加、刪除、修改或排序操作,只能重新賦值創(chuàng)建新的元組。元組不可修改訪問元素元素內(nèi)置方法通過索引訪問元組元素,支持切片操作。index()和count()方法用于查找和計算元素的索引和出現(xiàn)次數(shù)。元組操作>>>a=(1,2,4,6,7,9) >>>a[1]2

>>>a[1:5:2] #表示索引搜索范圍在[1,5),2表示步長(2,6)

index()方法查找和指定值第一次匹配的元素位置索引(根據(jù)就近原則,從左往右,找到首個即結(jié)束)。調(diào)用語法為:tuple.index(value[,start[,stop]])。count()方法返回指定值在元組中出現(xiàn)的次數(shù)。使用方式同列表同名方法,調(diào)用語法為:tuple.count(value)。列表和元組創(chuàng)建效率比較元組的創(chuàng)建速度比列表稍快,但通常情況下無需特別在意這種微小的差別無論如何,元組和列表都是有效的數(shù)據(jù)結(jié)構(gòu),選擇哪種結(jié)構(gòu)主要取決于使用場景和性能要求。#多次初始化一個相同元素的列表start=time() foriinrange(100000):a=[1,2,3,4,5,6]print("listtest",str(time()-start)+"s")輸出:listtest0.010180234909057617s#多次初始化一個相同元素的元組start=time() foriinrange(100000):a=(1,2,3,4,5,6)print("tupletest",str(time()-start)+"s")輸出:tupletest0.005105018615722656s元組記錄數(shù)據(jù)元組是一種適合用于記錄數(shù)據(jù)的類型,可以類似于帶字段名的記錄。具名元組使用`namedtuple()`函數(shù)可以創(chuàng)建具名元組,方便直接通過屬性獲取元素值。元組優(yōu)勢元組具有方便創(chuàng)建和訪問的優(yōu)勢,是一種非常有用的數(shù)據(jù)類型,尤其適合存放不需要修改的數(shù)據(jù)。元組的價值fromcollectionsimportnamedtuple #生成一個City類City=namedtuple("City","namecountrypolulationcoordinates")#實例化tokyo=City("Tokyo",'JP','36.93',('35.68','139,69'))print(tokyo)print()print(City._fields)

輸出:City(name='Tokyo',country='JP',polulation='36.93',coordinates=('35.68','139,69'))Tokyo('name','country','polulation','coordinates')字符串04字符串索引字符串中的每一個字符可以通過索引訪問,索引從0開始。切片操作切片操作可以獲取字符串的子串,格式為string[start:end:step]訪問元素>>>s="HelloPython,helloworld" >>>s[0]'H'>>>s[5] #注意,空格也是一個字符''>>>s[30] #在進行字符串截取的時候,如果指定的索引不存在,則會拋出異常IndexError:stringindexoutofrange>>>s="HelloPython,helloworld" >>>print(s[6:12:2])Pto>>>print(s[:12]) #從首位切片HelloPython>>>print(s[6:]) #切片到末尾Python,helloworld>>>print(s[:]) #整體切片拷貝HelloPython,helloworld字符串不可修改字符串不可修改,只能通過重新賦值生成新的字符串。重新賦值通過重新賦值,可以改變字符串中字符的排列順序,但無法增加或刪除字符。修改元素>>>s='hello' >>>s[0]=‘k’#會得到錯誤TypeError:'str'objectdoesnotsupportitemassignment>>>s='heloo'>>>print(s)’heloo’字符串提供了大小寫轉(zhuǎn)換方法,如`lower()`、`upper()`、`swapcase()`、`capitalize()`、`title()`。使用`replace()`和`translate()`方法可以替換字符串中的部分元素內(nèi)容。字符串大小寫轉(zhuǎn)換&替換替換元素>>>s="HelloPython,HelloWorld123" >>>s.lower()'hellopython,helloworld123'>>>s="HelloPython,HelloWorld123" >>>s.upper()'HELLOPYTHON,HELLOWORLD123'>>>a='abcsda'>>>print(a.replace('b','小明')) a小明csda#使用帶有ASCII碼的字典將83(S)替換為80(P)>>>mydict={83:80}>>>txt="HelloSam!">>>print(txt.translate(mydict)) HelloPam!maketrans()方法可以創(chuàng)建映射表。這個映射表指出了不同Unicode碼點之間的轉(zhuǎn)換關(guān)系。語法格式為:string.maketrans(x,y,z)其中:x是必需參數(shù)。如果僅指定一個參數(shù),x是描述如何執(zhí)行替換的字典;如果指定兩個或多個參數(shù),則此參數(shù)必須是一個字符串,該字符串指定要替換的字符。y是可選參數(shù),是與參數(shù)x長度相同的字符串。z是可選參數(shù)。描述要從原始字符串中刪除的字符。使用映射表替換多個字符,maketrans()方法返回一個以Unicode格式描述每個替換的字典。創(chuàng)建映射表替換元素>>>txt="GoodnightSam!";>>>x="mSa";>>>y="eJo";>>>z="odnght";>>>mytable=txt.maketrans(x,y,z); >>>print(txt.maketrans(x,y,z)){109:101,83:74,97:111,111:None,100:None,110:None,103:None,104:None,116:None}>>>print(txt.translate(mytable));GiJoe!字符串是不可變的,意味著一旦創(chuàng)建,其元素就不能被更改。因此,元組可以看作是不可變的列表。字符串不可修改由于字符串不可修改,無法在中間添加新元素,但可以通過拼接來實現(xiàn)。例如,將兩個字符串連接起來可以使用"+"號。拼接操作添加元素>>>mot_en="Rememberanceisaformmeeting.Frgetfulnessisaformoffreedom" >>>mot_cn="記憶是一個相遇。遺忘是一種自由。">>>print(mot_en+"-"+mot_cn)Rememberanceisaformmeeting.Frgetfulnessisaformoffreedom-記憶是一個相遇。遺忘是一種自由。>>>a=23>>>message="Happy"+str(a)+"rdBirthday!" >>>print(message)Happy23rdBirthday!

>>>message="Happy"+23+"rdBirthday!"TypeError:canonlyconcatenatestr(not"int")tostr

刪除元素字符串不可修改由于字符串不可修改,只能用del語句刪除整個字符串??瞻鬃址麆h除使用strip()、lstrip()、rstrip()方法可以刪除字符串首尾的空白字符或指定字符。元素內(nèi)容替換>>>s1="HelloPython">>>print(s1.strip())HelloPython>>>s2="HelloPython">>>print(s2.strip())HelloPython>>>s3="HelloPython" >>>print(s3.strip())HelloPython>>>s="HelloPython">>>s.lstrip()'HelloPython'>>>s.rstrip()'HelloPython'使用index()、count()、find()、startswith()、endswith()方法進行檢索。字符串檢索檢索元素>>>txt="Hello,welcometomyworld." >>>x=txt.index("e",5,10)>>>print(x)8>>>txt="Hello,welcometomyworld." >>>x=txt.count("my",10,24)>>>print(x)1>>>txt="Hello,welcometomyworld." >>>x=txt.find("my",10,24)>>>print(x)18>>>txt="Hello,welcometomyworld." >>>x=txt.find("q",)>>>print(x)-1>>>y=txt.index("q")ValueError:substringnotfound使用index()、count()、find()、startswith()、endswith()方法進行檢索。字符串檢索檢索元素>>>txt="Hello,welcometomyworld." >>>x=txt.startswith("Hello")>>>print(x)True>>>txt="Hello,welcometomyworld." >>>x=txt.endswith("word")>>>print(x)False將字符串拆分為列表,使用split()方法。將列表中的元素連接為字符串,使用join()方法。列表化字符串和列表的相互操作>>>txt="hello,mynameisPeter,Iam26yearsold" >>>x=txt.split(",")>>>print(x)['hello','mynameisPeter','Iam26yearsold']>>>name='JohnJohnson’ >>>a=name.split()>>>print(a)['John','Johnson']>>>txt="apple#banana#cherry#orange" >>>x=txt.split("#",1)>>>print(x)['apple','banana#cherry#orange']字符串常用方法或函數(shù)匯總方法說明capitalize()將第一個字符轉(zhuǎn)換為大寫casefold()將字符串轉(zhuǎn)換為小寫,Python3.3版本之后引入的,其效果和lower()方法非常相似,都可以轉(zhuǎn)換字符串中所有大寫字符為小寫。center()返回一個原字符串居中,并使用空格填充至長度width的新字符串。默認(rèn)填充字符為空格。count()返回指定值在字符串中出現(xiàn)的次數(shù)encode()返回指定的編碼格式編碼字符串。endswith()如果字符串以指定值結(jié)尾,則返回trueexpandtabs()返回字符串中的tab符號('\t')轉(zhuǎn)為空格后生成的新字符串。find()在字符串中搜索指定的值,并返回找到該字符串的位置format()把指定值格式化為指定格式。format_map()針對字典類型的格式化后的新的對象index()在字符串中搜索指定的值,并返回找到該字符串的位置isalnum()如果字符串中的所有字符都是字母數(shù)字,則返回Trueisalpha()如果字符串至少有一個字符并且所有字符都是字母則返回True,否則返回False。isdecimal()如果字符串是否只包含十進制字符返回True,否則返回False。isdigit()如果字符串只包含數(shù)字則返回True否則返回False。isidentifier()用于判斷字符串是否是有效的Python標(biāo)識符,可用來判斷變量名是否合法。islower()如果字符串中的所有字符均為小寫,則返回Trueisnumeric()如果字符串中只包含數(shù)字字符,則返回True,否則返回Falseisprintable()如果字符串中的所有字符都是可打印的,則返回Trueisspace()如果字符串中的所有字符都是空格,則返回Trueistitle()如果字符串中所有的單詞拼寫首字母是否為大寫,且其他字母為小寫則返回True,否則返回False.isupper()如果字符串中的所有字符均為大寫,則返回Truejoin()獲取可迭代對象中的所有元素,并將它們連接為一個字符串。ljust()返回一個原字符串左對齊,并使用空格填充至指定長度的新字符串。如果指定的長度小于原字符串的長度則返回原字符串。lower()將字符串轉(zhuǎn)換為小寫lstrip()返回截掉字符串左邊的空格或指定字符后生成的新字符串。maketrans()用于創(chuàng)建字符映射的轉(zhuǎn)換表,對于接受兩個參數(shù)的最簡單的調(diào)用方式,第一個參數(shù)是字符串,表示需要轉(zhuǎn)換的字符,第二個參數(shù)也是字符串表示轉(zhuǎn)換的目標(biāo)。partition()返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。replace()返回一個字符串,其中將指定值替換為指定值rfind()返回字符串最后一次出現(xiàn)的位置(從右向左查詢),如果沒有匹配項則返回-1。rindex()返回子字符串最后一次出現(xiàn)在字符串中的的索引位置,如果沒有匹配項則會報一個異常。rjust()返回一個原字符串右對齊,并使用空格填充至長度width的新字符串。如果指定的長度小于字符串的長度則返回原字符串。rpartition()返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串。rsplit()在指定的分隔符處分割字符串,并返回一個列表rstrip()返回刪除string字符串末尾的指定字符后生成的新字符串。split()在指定的分隔符處分割字符串,并返回一個列表splitlines()在換行符處分割字符串并返回一個列表startswith()如果字符串以指定值開頭,則返回truestrip()返回移除字符串頭尾指定的字符生成的新字符串。swapcase()交換大小寫,小寫變成大寫,反之亦然title()將每個單詞的第一個字符轉(zhuǎn)換為大寫translate()返回翻譯后的字符串upper()將字符串轉(zhuǎn)換為大寫zfill()返回指定長度的字符串,原字符串右對齊,前面填充0。通用操作05通用操作操作描述示例:X=[1,1,2,3,5,8];Y='hello'X1+X2聯(lián)接序列X1和X2,生成新序列

注意:序列類型必須相同,列表不能與字符串相加。>>>X+X[1,1,2,3,5,8,1,1,2,3,5,8]>>>Y+Y'hellohello'X*n序列X重復(fù)n次,生成新序列>>>X*2[1,1,2,3,5,8,1,1,2,3,5,8]>>>Y*2'hellohello'X[i]引用序列X中下標(biāo)為i的成員>>>X[0][1]>>>Y[-1]'o'X[i:j]引用序列X中下標(biāo)為i到j(luò)-1的子序列切片操作,用于訪問部分?jǐn)?shù)據(jù)>>>X[1:-3][1,2]>>>X[3:][3,5,8]>>>X[:3][1,1,2]X[i:j:k]引用序列X中下標(biāo)為i到j(luò)-1的子序列,步長為k>>>X[0:5:2][1,2,5]>>>X[-1:1:-1][8,5,3,2]>>>X[::-1][8,5,3,2,1,1]len(X)計算序列X中成員的個數(shù)>>>len(X)6>>>len(Y)5max(X)序列X中的最大值字符串的大小是按照其Unicode編碼來比較的>>>max(X)8>>>max(Y)'o'min(X)序列X中的最小值>>>min(X)1>>>min(Y)'e'vinX檢查v是否在序列X中,返回布爾值對于列表,只能判斷某個元素是否在序列中;對于字符串,可以判斷某段字符是否在該序列中。>>>[1,1]inXFalse>>>[1,1]in[[1,1],2,3,5,8]True>>>'l'in'hello'True>>>'ll'in'hello'TruevnotinX檢查v是否不在序列X中,返回布爾值

文件文件處理是字符串?dāng)?shù)據(jù)類型的應(yīng)用程序。所有文件處理程序都能夠保存和讀取文檔作為磁盤上的文件。文件的輸入和輸出實際上是字符串處理的另一種形式。文件是存儲在輔助存儲器上的數(shù)據(jù)序列,可以包含任何數(shù)據(jù)類型,最簡單的是文本文件。06使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件調(diào)用語法為:open(name[,mode])其中:name是一個字符串,提供了磁盤當(dāng)前相對路徑下的文件名,又或者是該文件的絕對路徑;mode參數(shù)決定了打開文件的模式,如只讀、寫入、追加等,該參數(shù)可選,默認(rèn)文件訪問模式為只讀。mode參數(shù)描述t文本模式(默認(rèn))。x寫模式,新建一個文件,如果該文件已存在則會報錯。b二進制模式。+打開一個文件進行更新(可讀可寫)。U通用換行模式(不推薦)。r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認(rèn)模式。rb以二進制格式打開一個文件用于只讀。文件指針默認(rèn)放在文件的開頭。一般用于非文本文件如圖片等。r+打開一個文件用于讀寫。文件指針將會放在文件的開頭。rb+以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。

一般用于非文本文件如圖片等。w打開一個文件只用于寫入。如果該文件已存在,則打開文件,并從開頭開始編輯,即原有內(nèi)容會被刪除。如果該文件不存在,創(chuàng)建新文件。wb以二進制格式打開一個文件只用于寫入。如果該文件已存在,則打開文件,并從開頭開始編輯,即原有內(nèi)容會被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。w+打開一個文件用于讀寫。如果該文件已存在,則打開文件,并從開頭開始編輯,即原有內(nèi)容會被刪除。如果該文件不存在,創(chuàng)建新文件。wb+以二進制格式打開一個文件用于讀寫。

如果該文件已存在則打開文件,并從開頭開始編輯,即原有內(nèi)容會被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。a打開一個文件用于追加。如果該文件已存在,文件指針放在文件結(jié)尾,新內(nèi)容被寫入到已有內(nèi)容之后。

如果該文件不存在,創(chuàng)建新文件進行寫入。ab以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針放在文件結(jié)尾,新內(nèi)容被寫入到已有內(nèi)容之后。

如果該文件不存在,創(chuàng)建新文件進行寫入。a+打開一個文件用于讀寫。如果該文件已存在,文件指針放在文件結(jié)尾,文件打開時會是追加模式。

如果該文件不存在,創(chuàng)建新文件用于讀寫。ab+以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫。使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#read_numbers.py

fname=input("Enterfilename:") infile=open(fname,"r")data1=infile.read()print(data1)infile.close()

輸出:Enterfilename:numbers.txtThisisatxtwithphone-numbers:13745638574150849275881346477412215780990234使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#readline_numbers.py'''打開文件,對象保存至infile'''data2=infile.readline()print(data2)#若不需要整行內(nèi)容獲取,而是部分字節(jié),可以在()輸入整數(shù),表示需要讀取前幾個字節(jié)#注意,之前已讀取的行信息將不再被讀取data2_2=infile.readline(5)print(data2_2)infile.close()輸出:Enterfilename:numbers.txtThisisatxtwithphone-numbers:13745使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#readline_numbers_2.py'''打開文件,對象保存至infile'''while1:data=infile.readline()ifnotdata:breakprint(data)infile.close()

輸出:Enterfilename:numbers.txtThisisatxtwithphone-numbers:

使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#readlines_numbers.py'''打開文件,對象保存至infile'''data3=infile.readlines()print(data3)infile.close()

輸出:Enterfilename:numbers.txt['Thisisatxtwithphone-numbers:\n',n',n',n',n']使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#readlines_numbers_2.py'''打開文件,對象保存至infile'''#如果返回的字節(jié)總數(shù)大于5,則不要返回下一行data4=infile.readlines(5)print(data4)infile.close()

輸出:Enterfilename:numbers.txt['Thisisatxtwithphone-numbers:\n']使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#readlines_numbers_3.py'''打開文件,對象保存至infile '''fordataininfile.readlines(): print(data)infile.close()

輸出結(jié)果同readline_numbers_2.py使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#read_each_line_numbers.py'''打開文件,對象保存至infile'''

forlineininfile:print(line)infile.close()

輸出結(jié)果同readline_numbers_2.py使用`open()`函數(shù)創(chuàng)建一個文件對象,指定文件名和打開模式(讀取、寫入、追加等)打開文件使用文件對象的`read()`、`readline()`或`readlines()`方法讀取文件內(nèi)容讀取文件內(nèi)容使用文件對象的`write()`方法寫入內(nèi)容到文件寫入文件內(nèi)容文件使用文件對象的`close()`方法關(guān)閉文件關(guān)閉文件#continue_write.pyoutfile=open("writein.txt","a") #若需要覆蓋原始內(nèi)容,mode選擇woutfile.write("12785776986") #print語句也能寫入:print("12785776986",file=outfile)outfile.close()

#打開并讀取文件后追加:infile=open("writein.txt","r")print(infile.read())infile.close()

輸出:Thisisatxtwithphone-numbers:1374563857415084927588134647741221578099023412785776986

字典和集合的基本操作字典集合可變類型和不可變類型字典字典(Dictionary)是Python中的一種無序、可變、有索引的集合,用于存儲鍵值對。字典中的每個鍵值對都包含一個鍵和其對應(yīng)的值,鍵是唯一的,但值可以重復(fù)。01thisdict={"name":"cjavapy", "age":3,"gender":"man"}字典的創(chuàng)建創(chuàng)建空字典使用花括號`{}`或`dict()`函數(shù)創(chuàng)建空字典。直接賦值創(chuàng)建使用花括號并指定鍵值對創(chuàng)建字典。使用關(guān)鍵字參數(shù)創(chuàng)建使用`dict()`函數(shù)和關(guān)鍵字參數(shù)創(chuàng)建字典。使用`fromkeys()`方法創(chuàng)建使用`fromkeys()`方法創(chuàng)建具有指定鍵的字典。>>>a={} >>>a=dict()>>>dic={'spam':1,'egg':2,'bar':3} >>>dic{'bar':3,'egg':2,'spam':1}>>>dic=dict(spam=1,egg=2,bar=3) >>>x=('key1','key2','key3') >>>y=0>>>thisdict=dict.fromkeys(x,y)>>>print(thisdict){'key1':0,'key2':0,'key3':0}

字典的創(chuàng)建通過二元組列表創(chuàng)建使用`dict()`函數(shù)將二元組列表轉(zhuǎn)換為字典。使用`zip`函數(shù)創(chuàng)建結(jié)合`dict()`和`zip`函數(shù)創(chuàng)建字典。使用字典推導(dǎo)式通過推導(dǎo)式創(chuàng)建字典。>>>lis=[('spam',1),('egg',2),('bar',3)] >>>dic=dict(lis)>>>dic=dict(zip('abc',[1,2,3])) >>>print(dic){'a':1,'c':3,'b':2}>>>dic={i:2*iforiinrange(3)} >>>dic{0:0,1:2,2:4}訪問字典的值刪除字典條目添加/修改字典條目通過鍵訪問字典中的值,也可以使用`get()`方法獲取指定鍵的值。使用賦值語句添加新的鍵值對,或使用`update()`方法更新字典。使用`del`語句刪除指定的鍵值對,或使用`pop()`方法刪除指定鍵及其對應(yīng)的值,或使用`clear()`方法清空字典,或使用`popitem()`方法刪除最后插入的鍵值對。基本的字典操作>>>thisdict={"name":"cjavapy","age":3,"gender":"man"} >>>thisdict["name"]'cjavapy'>>>thisdict.get("age") 3>>>thisdict.get("job")>>>thisdictNone訪問字典的值刪除字典條目添加/修改字典條目通過鍵訪問字典中的值,也可以使用`get()`方法獲取指定鍵的值。使用賦值語句添加新的鍵值對,或使用`update()`方法更新字典。使用`del`語句刪除指定的鍵值對,或使用`pop()`方法刪除指定鍵及其對應(yīng)的值,或使用`clear()`方法清空字典,或使用`popitem()`方法刪除最后插入的鍵值對。基本的字典操作>>>thisdict={"name":"cjavapy","age":3,"gender":"man"} #獲取所有key>>>thisdict.keys() dict_keys(['name','age','gender’])

#獲取所有值>>>thisdict.values()dict_values(['cjavapy',3,'man’])

#獲取所有鍵值對>>>thisdict.items()dict_items([('name','cjavapy'),('age',3),('gender','man’)])

#利用

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論