版權(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ù))字符串(回顧)列表&元組字典&集合字符串字符串是一個(gè)字符序列。在Python中,字符串常量是用單引號(hào)、雙引號(hào)或三引號(hào)括起來(lái)的若干個(gè)字符,字符串變量是用來(lái)存放字符串常量的變量。字符串?dāng)?shù)據(jù)中的字符可以是計(jì)算機(jī)系統(tǒng)中允許使用的任何字符。字符串?dāng)?shù)據(jù)在應(yīng)用中是大量存在,例如統(tǒng)計(jì)一篇英文文章中不同英文字母出現(xiàn)的次數(shù)、按姓名排序、查找關(guān)鍵字等。例
從鍵盤輸入10個(gè)英文單詞,輸出其中以元音字母開(kāi)頭的單詞。分析:輸入一個(gè)英文單詞,并進(jìn)行判斷,用for循環(huán)控制重復(fù)執(zhí)行10次??梢詫⑺性糇帜笜?gòu)成一個(gè)字符串,遍歷該字符串中的各個(gè)字符,并判斷單詞的首字母。程序如下:ss="AEIOUaeiou"foriinrange(0,10):s=input("Pleaseenteraword:")forcinss:ifs[0]==c:print(s)breakss="AEIOUaeiou"b=""foriinrange(0,10):a=input("a=")ifa[0]inss:b=b+a+","print(b)字符串應(yīng)用舉例例
從鍵盤輸入幾個(gè)數(shù)字,用逗號(hào)分隔,求這些數(shù)字之和。分析:輸入的數(shù)字作為一個(gè)字符串來(lái)處理,首先分離出數(shù)字串,再轉(zhuǎn)換成數(shù)值,這樣就能求和。程序如下:s=input('請(qǐng)輸入幾個(gè)數(shù)字(用逗號(hào)分隔)')d=s.split(',')print(d)sum=0forxind:sum+=float(x)print('sum=',sum)P723.27例(P68例3.21)從鍵盤輸入字符(每次輸入一個(gè)),對(duì)輸入的字符進(jìn)行計(jì)數(shù),當(dāng)輸入的字符為“?”,停止計(jì)數(shù),計(jì)算輸入的字符個(gè)數(shù)并顯示。n=0ch=input("Pleaseenterachar,endwithenter!:")whilech!=“?”:n+=1ch=input("Pleaseenterachar,endwithenter!:")print("n=",n)例從鍵盤輸入一串字符,統(tǒng)計(jì)并輸出其中字母、數(shù)字和其他字符的個(gè)數(shù)。zm=0;qt=0;sz=0str1=input("Pleaseenterastring:")forchinstr1:ifch.isalpha():zm+=1elifch.isdigit():sz+=1else:qt+=1print("zm=",zm);print("sz=",sz);print("qt=",qt)例
輸入一個(gè)字符串,利用循環(huán),每次輸出去掉最后面的一個(gè)字符后的串,直到剩下一個(gè)字符為止。例如:運(yùn)行時(shí)輸入ABCDEF,輸出如下結(jié)果:ABCDEABCDABCABA程序如下:s=input("輸入字符串:")foriinrange(-1,-len(s),-1):print(s[:i])例
翻譯密碼(p79例3.38)。為了保密,不采用明碼電文,而用密碼電文,按事先約定的規(guī)律將一個(gè)字符轉(zhuǎn)換為另一個(gè)字符,收?qǐng)?bào)人則按相反的規(guī)律轉(zhuǎn)換得到原來(lái)的字符。分析:依次取電文中的字符,對(duì)其中的字母進(jìn)行處理,對(duì)字母之外的字符維持原樣。取字母的ASCII代碼,加上5,再按其ASCII碼轉(zhuǎn)換為另一個(gè)字母。還有一個(gè)問(wèn)題要處理,當(dāng)字母為“V”時(shí),加5過(guò)了“Z”,故應(yīng)使之轉(zhuǎn)換為“A”,同理,“W”→“B”,“X”→“C”,“Y”→“D”,“Z”→“E”。例Python的標(biāo)識(shí)符以字母或下劃線(_)開(kāi)頭,后接字母、數(shù)字或下劃線組成,從鍵盤輸入字符串,判斷它是否為Python的標(biāo)識(shí)符。分析:利用string模塊中的常量,包括string.digits(數(shù)字0~9)、string.ascii_letters(所有ASCII字符)、string.ascii_lowercase(所有小寫字母)、string.ascii_uppercase(所有大寫字母)。先輸入字符串,再分別判斷首字符和中間字符,并給出提示。判斷中間字符利用for循環(huán)遍歷字符串。程序如下:importstringalphas=string.ascii_letters+'_'nums=string.digitsprint('welcometotheIdentifierchecker1.0')print('Testeesmustbeatleast2charslong')myInput=input('Identifiertotest?')iflen(myInput)>1:ifmyInput[0]notinalphas:print('invalid:firstsymbolmustbealphabetic')else:forothercharinmyInput[1:]:ifothercharnotinalphas+nums:print('invalid:remainingsymbolsmustbealphanumeric')breakelse:print('okasanidentifier.')列表(list)和元組(tuple)要存儲(chǔ)的數(shù)據(jù)數(shù)目或類型不固定,列表和元組數(shù)據(jù)類型來(lái)存儲(chǔ)由多個(gè)值組成的序列。在列表或元組中,值可以是任何數(shù)據(jù)類型,稱為元素或項(xiàng)。逗號(hào)分隔的不同數(shù)據(jù)項(xiàng)用[]括起來(lái)即可創(chuàng)建列表,列表需要先定義。可以嵌套。逗號(hào)分隔的不同數(shù)據(jù)項(xiàng)用()括起來(lái)即可創(chuàng)建元組,逗號(hào)分隔的值默認(rèn)為元組。可以嵌套。列表[]元組(12,)有序有序可變不可變異構(gòu)異構(gòu)字符串、列表和元組的基本操作比較假設(shè)有字符串S、S2,列表L、L2,元組TS=“中國(guó)式現(xiàn)代化”,L=[1,”愛(ài)國(guó)”,”守法”,”明理”,”誠(chéng)信”],T=(1,2,3,4,5)例
字符串、列表和元組舉例s="中國(guó)式現(xiàn)代化“max(s)L=[1,"愛(ài)國(guó)","守法","明理","誠(chéng)信"]print(L[0])print(L[1:3])delL[-1]print(L)del(L)tup1=('physics','chemiatry',1997,2000)tup2=(1,2,3,4,5,6,7)print("tup1[0]:",tup1[0])print("tup2[1:5]:",tup2[1:5])例4.2列表元素的更改舉例。>>>lst=[1,2,3,4]>>>lst[3]4>>>lst[3]="Hello">>>lst[1,2,3,"Hello"]>>>lst[2]=7>>>lst[1,2,7,"Hello"]>>>lst[1:3]=["Slice","Assignment"]>>>lst[1,"Slice","Assignment","Hello"]更多列表操作
(list為列表名,x為元素)操作含義舉例list.append(x)末尾追加元素Xlist.extend(L)列表合并list.insert(i,x)i位置插入元素x無(wú)返回值list.remove(x)刪除第一個(gè)值為x的元素,不存在出錯(cuò)無(wú)返回值list.pop([i])刪除i位置元素并返回,無(wú)i操作最后一個(gè)元素List.pop(2)dellist([i:j])
刪除列表或列表的部分內(nèi)容dell[1:3]list.clear()刪除列表中的所有元素list.index(x)返回x元素的索引值,不存在出錯(cuò)list.count(x)返回x在列表中出現(xiàn)的次數(shù)list.sort()元素排序,默認(rèn)為升序無(wú)返回值list.reverse()逆序無(wú)返回值list.copy()返回列表的淺復(fù)制廣泛踐行社會(huì)主義核心價(jià)值觀
社會(huì)主義核心價(jià)值觀是凝聚人心、匯聚民力的強(qiáng)大力量。弘揚(yáng)以偉大建黨精神為源頭的中國(guó)共產(chǎn)黨人精神譜系,用好紅色資源,深入開(kāi)展社會(huì)主義核心價(jià)值觀宣傳教育,深化愛(ài)國(guó)主義、集體主義、社會(huì)主義教育,著力培養(yǎng)擔(dān)當(dāng)民族復(fù)興大任的時(shí)代新人。推動(dòng)理想信念教育常態(tài)化制度化,持續(xù)抓好黨史、新中國(guó)史、改革開(kāi)放史、社會(huì)主義發(fā)展史宣傳教育,引導(dǎo)人民知史愛(ài)黨、知史愛(ài)國(guó),不斷堅(jiān)定中國(guó)特色社會(huì)主義共同理想。用社會(huì)主義核心價(jià)值觀鑄魂育人,完善思想政治工作體系,推進(jìn)大中小學(xué)思想政治教育一體化建設(shè)。堅(jiān)持依法治國(guó)和以德治國(guó)相結(jié)合,把社會(huì)主義核心價(jià)值觀融入法治建設(shè)、融入社會(huì)發(fā)展、融入日常生活?!粤?xí)總書記二十大報(bào)告列表舉例例如:用計(jì)算機(jī)隨機(jī)產(chǎn)生10個(gè)100以內(nèi)的數(shù)并輸出,然后對(duì)這10個(gè)數(shù)從大到小排序后再輸出。importrandom#導(dǎo)入隨機(jī)模塊list1=[]#定義一個(gè)列表foriinrange(0,10):#循環(huán)10次a=random.randint(1,100)#隨機(jī)產(chǎn)生一個(gè)1-100的內(nèi)的整數(shù)list1.append(a)#追加到列表末尾print(list1)#輸出產(chǎn)生的列表list1.sort()List1.reverse()
#對(duì)列表排序print(list1)#輸出排序后的列表列表解析列表解析是Python語(yǔ)言強(qiáng)有力的語(yǔ)法,使用for、if等語(yǔ)句組合也可完成同樣的任務(wù),但列表解析書寫的代碼更簡(jiǎn)潔(但不易讀)。列表解析是根據(jù)已有列表,高效創(chuàng)建新列表的方式,是Python迭代機(jī)制的一種應(yīng)用,它常用于實(shí)現(xiàn)創(chuàng)建新的列表,就是對(duì)于一個(gè)可迭代的對(duì)象中的每一個(gè)元素,通過(guò)表達(dá)式對(duì)該元素作用,得到一個(gè)計(jì)算結(jié)果,然后再通過(guò)for循環(huán)遍歷這個(gè)可迭代對(duì)象的每一個(gè)元素,將作用后的結(jié)果構(gòu)成一個(gè)列表。這個(gè)作用后的結(jié)果可能是由之前元素計(jì)算得到的新對(duì)象,也可能就是原先的元素。列表解析#產(chǎn)生保留圓周率1到5位小數(shù)的列表元素#列表解析importmathL=[round(math.pi,i)foriinrange(1,6)]print(L)#等價(jià)代碼importmathL=[]foriinrange(1,6):L.append(round(math.pi,i))print(L)列表解析例4.5創(chuàng)建平方數(shù)列表的方法比較。squares=[]forxinrange(10): #創(chuàng)建0到9的平方列表squares.append(x**2)squares[0,1,4,9,16,25,36,49,64,81]列表解析語(yǔ)句可更加簡(jiǎn)便快捷地實(shí)現(xiàn)上述功能:squares=[x**2forxinrange(10)]元組與列表Python元組和列表可以相互替換,很多操作類似,但有區(qū)別:(1)元組是不可變的序列類型,元組能對(duì)不需要改變的數(shù)據(jù)進(jìn)行寫保護(hù),使數(shù)據(jù)更安全。列表是可變的序列類型,可以添加、刪除或搜索列表中的元素。(2)元組使用小括號(hào)定義用逗號(hào)分隔的元素,而列表中的元素應(yīng)該包括在中括號(hào)中。雖然元組使用小括號(hào),但訪問(wèn)元組元素時(shí),要使用中括號(hào)按索引或分片來(lái)獲得對(duì)應(yīng)元素的值。(3)元組可以在字典中作為關(guān)鍵字使用,而列表不能作為字典關(guān)鍵字使用,因?yàn)榱斜硎强筛淖兊摹?4)只要不修改元組,大多數(shù)情況下可把它們作為列表來(lái)進(jìn)行操作。(5)實(shí)際應(yīng)用中:元組比列表有優(yōu)勢(shì):運(yùn)算速度快,元組更安全。元組與列表的轉(zhuǎn)換通過(guò)list()函數(shù)和tuple()函數(shù)實(shí)現(xiàn)互相轉(zhuǎn)換。tuple()相當(dāng)于凍結(jié)一個(gè)列表,而list()相當(dāng)于解凍一個(gè)元組。例如:>>>list1=[1,2,3]>>>tup1=tuple(list1)>>>tup1(1,2,3)>>>list(tup1)[1,2,3]利用列表解析,也可以實(shí)現(xiàn)元組與列表的數(shù)據(jù)轉(zhuǎn)換。注意:list()還能將字符串轉(zhuǎn)化為列表!eval()函數(shù)產(chǎn)生一個(gè)元組或列表元組與列表的相互轉(zhuǎn)換例4.7分別從兩個(gè)列表中取不相等的兩個(gè)元素組合出新列表。>>>[(x,y)forxin[1,2,3]foryin[3,1,4]ifx!=y][(1,3),(1,4),(2,3),(2,1),(2,4),(3,1)(3,4)]上述代碼等價(jià)于:>>>combs=[]>>>forxin[1,2,3]:foryin[3,1,4]:ifx!=y:combs.append((x,y))>>>combs[(1,3),(,1,4),(2,3),(2,1),(2,4),(3,1),(3,4)]元組與列表的相互轉(zhuǎn)換例4.8利用列表解析生成九九乘法表元組元素的列表。>>>s=[(x,y,x*y)forxinrange(1,10)foryinrange(1,10)ifx>=y]>>>s[(1,1,1),(2,1,2),(2,2,4),(3,1,3),(3,2,6),(3,3,9),(4,1,4),(4,2,8),(4,3,12),(4,4,16),(5,1,5),(5,2,10),(5,3,131,(5,4,20),(5,5,25),(6,1,6),(6,2,12),(6,3,18),(6,4,24),(6,5,30),(6,6,36),(7,1,7),(7,2,14),(7,3,21),(7,4,28),(7,5,35),(7,6,42),(7,7,49),(8,1,8),(8,2,16),(8,3,24),(8,5,40),(8,6,48),(8,7,56),(8,8,64),(9,1,9),(9,2,18),(9,3,27),(9,4,36),(9,5,45),(9,6,54),(9,7,63),(9,8,72),(9,9,81)]。元組解包在講解創(chuàng)建元組的例子中,聲明t='a','b','c','d'稱為元組打包。其實(shí)也可以進(jìn)行反向操作——元組解包(unpacking),即將等號(hào)右側(cè)元組中的元素按順序依次賦給等號(hào)左邊的變量。例如:>>>t=(1,2,3)>>>a,b,c=t#解包>>>a1>>>b2>>>c3列表和元組的應(yīng)用-數(shù)據(jù)排序假設(shè)將n個(gè)數(shù)按從小到大順序排列后輸出,排序過(guò)程通常分為以下3個(gè)步驟。①將需要排序的n個(gè)數(shù)存放到一個(gè)列表中(設(shè)列表x)。②將列表x中的元素從小到大排序,即x[0]最小,x[1]次之,…,x[n-1]最大。③將排序后的x列表輸出。其中,第②步是關(guān)鍵。常用的排序方法:交換比較冒泡交換排序例4.9利用簡(jiǎn)單交換排序法,將n個(gè)數(shù)按從小到大順序排列后輸出?;舅悸罚簩⑽挥谧钋懊娴臄?shù)和它后面的數(shù)進(jìn)行比較,比較若干次以后,即可將最小的數(shù)放到最前面。第一輪比較過(guò)程是:x[0]與x[1]比較,如果x[0]>x[1],則將它們互換,否則不交換,x[0]是x[0]與x[1]中的較小數(shù)。x[0]與x[2]比較,如果x[0]>x[2],則將它們互換,否則不互換,x[0]
x[0]、x[1]和x[2]中的最小值。如此重復(fù),最后x[0]與x[n-1]比較,如果x[0]>x[n-1],則將x[0]與x[n-1]互換,否則不互換,這樣在x[0]中得到的數(shù)就是列表x的最小值(一共比較了n-1次)。第二輪比較過(guò)程是:x[1]與它后面的元素x[2],x[3],…,x[n-1]進(jìn)行比較,如果x[1]大于某元素,則將該元素與x[1]互換,否則不互換。這樣經(jīng)過(guò)n-2次比較后,在x[1]中將得到次小值。如此重復(fù),最后進(jìn)行第n-1輪比較,此時(shí)x[n-2]與x[n-1]比較,將小數(shù)放于x[n-2]中,大數(shù)放于x[n-1]中。例如:用交換排序法對(duì)54,45,78,26,3五個(gè)數(shù)進(jìn)行遞增排序。
可以用雙重循環(huán),外循環(huán)控制比較的輪數(shù),n個(gè)數(shù)排序需比較n-1輪,設(shè)有循環(huán)變量i,i從0變化到n-2。內(nèi)循環(huán)控制每輪比較的次數(shù),第i輪比較n-i次,設(shè)有循環(huán)變量j,j從i+1變化到n-1。每次比較的兩個(gè)元素分別為x[i]與x[j]。輪數(shù)次數(shù)原始數(shù)列544578263第一輪11、2比45547826321、3比45547826331、4比26547845341、5比354784526第二輪12、3比35478452622、4比34578542632、5比326785445第三輪13、4比32654784533、5比326457854第四輪14、5比326455478交換排序程序如下:n=int(input('輸入數(shù)據(jù)個(gè)數(shù):'))x=[]foriinrange(n):x.append(int(input('輸入一個(gè)數(shù):')))foriinrange(n-1): #控制比較的輪次
forjinrange(i+1,n): #控制每輪比較的次數(shù)
ifx[i]>x[j]: #排在每輪中最前面的數(shù)和后面的數(shù)依次進(jìn)行比較
x[i],x[j]=x[j],x[i]print('排序后數(shù)據(jù):',x)選擇排序例4.10利用選擇排序法,將n個(gè)數(shù)按從小到大順序排列后輸出。選擇排序法基本思路:在n個(gè)數(shù)中,找出最小的數(shù),使它與x[0]互換,然后從n-1個(gè)數(shù)中,找最小的數(shù),使它與x[1]互換,依此類推,直到剩下最后一個(gè)數(shù)據(jù)為止。程序如下:n=int(input('輸入數(shù)據(jù)個(gè)數(shù):'))x=[]foriinrange(n):x.append(int(input('輸入一個(gè)數(shù):')))foriinrange(n-1): #控制比較的輪次
k=iforjinrange(i+1,n): #找最小數(shù)的下標(biāo)
ifx[k]>x[j]:k=jifk!=i: #將最小數(shù)和排在最前面的互換
x[i],x[k]=x[k],x[i]print('排序后數(shù)據(jù):',x)冒泡排序例4.11利用冒泡排序法,將n個(gè)數(shù)按從大到小順序排列后輸出。分析:冒泡排序法基本思路:將相鄰的兩個(gè)數(shù)兩兩比較,使大的在前,小的在后??梢杂秒p重循環(huán):外循環(huán)控制比較的輪數(shù),n個(gè)數(shù)排序需比較n-1輪,設(shè)有循環(huán)變量i,i從0變化到n-2;內(nèi)循環(huán)控制每輪比較的次數(shù),第i輪比較n-i次,設(shè)有循環(huán)變量j,j從0變化到n-2-i。每次比較的兩個(gè)元素分別為x[j]與x[j+1]。冒泡排序法舉例例如:用冒泡法對(duì)5個(gè)數(shù)(17,12,20,29,5)進(jìn)行遞增排序。
第一趟:1(1和2比)121720295
2(2和3比)121720295
3(3和4比)121720295
4(4和5比)121720529第二趟:1(1和2比)121720529
2(2和3比)121720529
3(3和4比)121752029第三趟:1(1和2比)121752029
2(2和3比)12517
2029第四趟:1(1和2比)512172029
總結(jié):n個(gè)數(shù)比較n-1趟,每趟比較n-i次冒泡排序程序如下:n=int(input('輸入數(shù)據(jù)個(gè)數(shù):'))x=[]foriinrange(n):x.append(int(input('輸入一個(gè)數(shù):')))foriinrange(n-1): forjinrange(n-1-i):ifx[j]>x[j+1]: x[j],x[j+1]=x[j+1],x[j]print('排序后數(shù)據(jù):',x)數(shù)據(jù)查找數(shù)據(jù)查找是從一組數(shù)據(jù)中找出具有某種特征的數(shù)據(jù)項(xiàng),它是數(shù)據(jù)處理中應(yīng)用很廣泛的一種操作。常見(jiàn)的數(shù)據(jù)查找方法有順序查找和二分査找(折半查找)。例4.12:設(shè)有n個(gè)數(shù)已存在序列a中,利用順序查找法查找數(shù)據(jù)x是否在序列a中。分析:順序查找又稱線性查找,其基本思想是,對(duì)所存儲(chǔ)的數(shù)據(jù)從第一項(xiàng)開(kāi)始,依次與所要查找的數(shù)據(jù)進(jìn)行比較,直到找到該數(shù)據(jù),或?qū)⑷吭卣彝赀€沒(méi)有找到該數(shù)據(jù)為止。程序如下:a=eval(input(“輸入一個(gè)數(shù)據(jù)序列,用逗號(hào)分隔:”))#eval()可產(chǎn)生一個(gè)原組x=eval(input("輸入待查數(shù)據(jù):"))foriina:#順序查找ifx==i: print("已找到",x)else:print("未找到",x)數(shù)據(jù)查找例4.13設(shè)有n個(gè)數(shù)已按大小順序排列好并存于序列a中,利用二分查找法查找數(shù)據(jù)x是否在序列a中。(1)在0到n-1中間選一個(gè)正整數(shù)k,用k把原來(lái)有序的序列分成3個(gè)子序列:①a[0],a[1],…,a[k-2]②a[k-1]③a[k],a[k+1],…,a[n-1](2)用a[k-1]與x比較,若x=a[k-1],查找過(guò)程結(jié)束。若x<a[k-1],則用同樣的方法把序列a[0],a[1],…,a[k-2]分成3個(gè)序列。若x>a[k-1],也用同樣的方法把序列a[k],a[k+1],…,a[n-1]分成3個(gè)序列,直到找到x或得到“x找不到”的結(jié)論為止。折半查找程序如下:(a按從小到大排列)a=eval(input(“輸入一個(gè)從小到大的數(shù)據(jù)序列,用逗號(hào)分隔:”))#a是元組x=eval(input("輸入待查數(shù)據(jù):"))n=len(a)lower=0upper=n-1flag=-1whileflag==-1andlower<=upper: #二分查找
mid=int((lower+upper)/2)ifx==a[mid]: flag=1 #已找到
elifx<a[mid]:upper=mid-1 #未找到
else:lower=mid+1ifflag==1:print("已找到",x)else:print("未找到",x)矩陣運(yùn)算矩陣運(yùn)算包括矩陣的建立、矩陣的基本運(yùn)算、矩陣的分析與處理等操作。Python的矩陣運(yùn)算功能非常豐富,應(yīng)用也非常廣泛。建立矩陣(數(shù)組)的方法:在列表中嵌套列表定義一個(gè)m行n的列表:[[0]*n]*m例如:>>>A=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]A是一個(gè)3×4矩陣。A所包含的元素的個(gè)數(shù)(長(zhǎng)度)是矩陣A的行數(shù),A的每一個(gè)元素的長(zhǎng)度是矩陣A的列數(shù)。例4.14給定一個(gè)m×n矩陣,其元素互不相等,求每行絕對(duì)值最大的元素及其所在列號(hào)。分析:首先要考慮的是如何用列表數(shù)據(jù)表示矩陣,用列表表示一維矩陣是顯然的,當(dāng)列表的元素是一個(gè)列表時(shí),列表可以表示二維矩陣。m,n=eval(input("輸入矩陣的行數(shù)和列數(shù)"))x=[[0]*n]*m#定義矩陣xforiinrange(m): #輸入矩陣的值
forjinrange(n):x[i][j]=eval(input("輸入數(shù)據(jù)項(xiàng),每輸一個(gè)數(shù)字打回車:"))程序如下:print("Matrixx:") #輸出矩陣的值foriinrange(len(x)):print(x[i])foriinrange(m):k=0 #假定第0列元素是第i行絕對(duì)值最大的元素
forjinrange(1,n):ifabs(x[i][j]>abs(x[i][k])):#求第i行絕對(duì)值最大元素的列號(hào)
k=jprint(i,k,x[i][k])例4.15矩陣乘法。已知m×n矩陣A和n×p矩陣B,試求它們乘積C=A×B。分析:求兩個(gè)矩陣A和B的乘積分為以下3步。(1)輸入矩陣A和B。(2)求A和B的乘積并存放到C中。(3)輸出矩陣C。其中第(2)步是關(guān)鍵。依照矩陣乘法規(guī)則,乘積C為m×p矩陣,且C的各元素的計(jì)算公式為:為了計(jì)算矩陣C,需要采用三重循環(huán)。其中,外層循環(huán)(設(shè)循環(huán)變量為i)控制矩陣A的行,中層循環(huán)(設(shè)循環(huán)變量為j)控制矩陣B的列,內(nèi)層循環(huán)(設(shè)循環(huán)變量為k)控制計(jì)算C的各元素,顯然,求C的各元素屬于累加問(wèn)題。A=[[2,1],[3,5],[1,4]]#3*2B=[[3,2,1,4],[0,7,2,6]]#2*4C=[[0]*len(B[0])]*[(len(A))] #定義矩陣C,3行4列foriinrange(len(A)):forjinrange(len(B[0])):t=0forkinrange(len(B)):t+=A[i][k]*B[k][j]C[i][j]=tprint("MatrixA:") #輸出矩陣Aforiinrange(len(A)):print(A[i])print("MatrixB:") #輸出矩陣Bforiinrange(len(B)):print(B[i])print("MatrixC:") #輸出矩陣Cforiinrange(len(C)):print(C[i])例4.16找出一個(gè)二維數(shù)組中的鞍點(diǎn),即該位置上的元素是該行上的最大值,是該列上的最小值。二維數(shù)組可能不止一個(gè)鞍點(diǎn),也可能沒(méi)有鞍點(diǎn)。
程序如下:m,n=eval(input("輸入矩陣的行數(shù)和列數(shù):"))a=[[0]*nforiinrange(m)] #定義矩陣foriinrange(m): #輸入矩陣的值
forjinrange(n):a[i][j]=eval(input("輸入數(shù)據(jù)項(xiàng),每輸入一個(gè)數(shù)回車:"))print("Matrixa:") #輸出矩陣的值foriinrange(len(a)):print(a[i])flag2=0 #設(shè)置flag2作為數(shù)組中是否有點(diǎn)的標(biāo)志foriinrange(len(a)):maxx=a[i][0] #求每一行最大元素及其所在列
forjinrange(len(a[0])):ifa[i][j]>maxx:maxx=a[i][j]maxj=jk=0flag1=1 #flag1作為行中的最大值是否有鞍點(diǎn)的標(biāo)志
whilek<len(a)andflag1:ifmaxx>a[k][maxj]: #判斷行中的最大值是否也是列中的最小值
flag1=0k+=1ifflag1:print("第{}行第{}列的{}是鞍點(diǎn)!".format(i,maxj,maxx))flag2=1ifnotflag2:print("該矩陣無(wú)鞍點(diǎn)!")列表舉例1、將列表中的偶數(shù)變成其平方,奇數(shù)保持不變。2、刪除列表中的重復(fù)元素3、生成100個(gè)100以內(nèi)的隨機(jī)正整數(shù)元組,統(tǒng)計(jì)每個(gè)數(shù)出現(xiàn)的次數(shù)。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)榱斜砜梢孕薷?。另外,字典的存?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)鍵字,而序列從起始元素開(kāi)始按順序編號(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中的字符拆開(kāi)以形成集合。例如:>>>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ǔ)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年中國(guó)郵政儲(chǔ)蓄銀行股份有限公司普洱市分行招聘見(jiàn)習(xí)人員(10人)參考考試題庫(kù)附答案解析
- 塑膠顏料生產(chǎn)管理制度
- 企業(yè)安全生產(chǎn)變更制度
- 食品生產(chǎn)經(jīng)營(yíng)記錄制度
- 養(yǎng)雞場(chǎng)生產(chǎn)安全管理制度
- 2026浙江臺(tái)州市溫嶺市濱海交警中隊(duì)面向社會(huì)招聘警務(wù)輔助人員1人備考考試題庫(kù)附答案解析
- 安全生產(chǎn)宣教工作制度
- 豐田CE生產(chǎn)制度
- 安全生產(chǎn)專家檢查制度
- 旅館安全生產(chǎn)管理制度
- 甘肅省武威市涼州區(qū)2025-2026學(xué)年上學(xué)期九年級(jí)化學(xué)期末模擬練習(xí)試卷含答案
- (2025年)勞動(dòng)關(guān)系協(xié)調(diào)員考試題庫(kù)與答案
- 企業(yè)客戶關(guān)系維護(hù)工作方案
- 華東理工大學(xué)2026年管理與其他專業(yè)技術(shù)崗位統(tǒng)一招聘?jìng)淇碱}庫(kù)含答案詳解
- 2026上海碧海金沙投資發(fā)展有限公司社會(huì)招聘參考題庫(kù)含答案
- 2026四川成都市金牛區(qū)城市管理局招聘編外聘用工作人員2人參考題庫(kù)必考題
- 輸血科質(zhì)控 年度總結(jié)匯報(bào)
- 2026年浙江高考語(yǔ)文考試真題
- 2025年貴州省公務(wù)員錄用考試《公安專業(yè)科目》真題
- 高壓注漿加固施工方案
- 道路運(yùn)輸安全重大風(fēng)險(xiǎn)辨識(shí)分級(jí)管控清單
評(píng)論
0/150
提交評(píng)論