




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、1Python程序設計Programming in Python主講:龐勝利2 2第三章 常用數(shù)據(jù)結(jié)構(gòu) 數(shù)字 字符串 列表 元組 字典34為什么使用內(nèi)置對象 內(nèi)置對象使程序更容易編寫內(nèi)置對象可以滿足大部分的應用 內(nèi)置對象往往比定制的數(shù)據(jù)結(jié)構(gòu)更有效率速度方面,內(nèi)置對象優(yōu)化了用C實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)算法 內(nèi)置對象是語言的標準的一部分5數(shù)字 Python提供了常用的數(shù)字類型:整數(shù)、浮點數(shù)以及與之相關(guān)的語法和操作 允許使用八進制、十六進制常量 提供了復數(shù)類型 提供了無窮精度的長度類型(只要內(nèi)存空間允許,可以增長成為任意位數(shù)的整數(shù))6數(shù)字常量數(shù)字數(shù)字常量常量1234,-24,0一般整數(shù)(c語言長整型)9999
2、99999999999999999999999L98888888888888888l長整型數(shù)(無限大?。?.23,3.14e-10,4E210,4.0e+210浮點數(shù)(C語言雙精度浮點數(shù))0177,0 x9ff八進制、十六進制3+4j,3.0+4.0j,3J復數(shù)常量7內(nèi)置數(shù)學工具和擴展 表達式操作符+、-、*、/、* 內(nèi)置數(shù)學函數(shù)pow、abs 公用模塊random、math等 專業(yè)擴展NumPy矩陣、向量處理等8變量和基本的表達式 變量就是用來記錄程序中的信息,它的特點:變量像對象一樣不需要聲明變量在第一次賦值時創(chuàng)建變量在表達式中使用將被替換為他們的值變量在表達式中使用以前必須已經(jīng)賦值9數(shù)字
3、的基本應用 a = 3 b = 4 a + 14 a - 12 b * 312 b / 22 a % 21 b * 216 2.0*b16.0 c * 2Traceback (most recent call last): File , line 1, in NameError: name c is not defined b/2+a5 b /(2.0 + a)0.80000000000000004 print b /(2.0 + a)0.810數(shù)字顯示的格式 num = 1 / 3.0 num0.33333333333333331 print num0.333333333333 %e%num
4、3.333333e-01 %2.2f%num0.33 11八進制、十六進制 將一個整數(shù)變?yōu)槠浒诉M制、十六進制的數(shù)字字符串oct hex 將一個數(shù)字的字符串變換成一個整數(shù),第二個參數(shù)用于指示變換后的數(shù)字的進制 用字符串格式表達式轉(zhuǎn)換成八進制、十六進制的字符串 oct(64)0100 hex(64)0 x40 int(0100)100 int(0100, 8)64 int(0 x40, 16)64 %o %x %X%(64, 64, 255)100 40 FF12數(shù)學內(nèi)置函數(shù)和內(nèi)置模塊 math模塊-普通數(shù)學函數(shù) cmath模塊-處理復數(shù)的模塊 acos, fsum, acosh, hypot,
5、asin, isinf, asinh, isnan, atan, ldexp, atan2, log, atanh, log10, ceil, log1p, copysign, modf, cos, pi, cosh, pow, degrees, radians, e, sin, exp, sinh, fabs, sqrt, factorial, tan, floor, tanh, fmod, trunc frexp, acos, log, acosh, log10, asin, phase, asinh, pi, atan, polar, atanh, rect, cos, sin, cos
6、h, sinh, e, sqrt, exp, tan, isinf, tanh isnan,13random模塊 用于產(chǎn)生隨機數(shù) import random random.random()0.33452758558893336 random.randint(1, 10)5 random.choice(a, b, c)c14字符串 在第二章已經(jīng)簡單介紹過字符串 簡單回顧字符串常量:單引號雙引號三引號轉(zhuǎn)義自然字符串Unicode字符串15字符串轉(zhuǎn)義 轉(zhuǎn)義字符同C語言的轉(zhuǎn)義字符轉(zhuǎn)義意義 newline行連續(xù)反斜線單引號”雙引號a響鈴b倒退f換頁n新行16轉(zhuǎn)義意義r返回t水平制表符v垂直制表符uhhh
7、hUnicode16位的十六進制值UhhhhUnicode32位的十六進制值xhh十六進制值0oo八進制值0Nullother不轉(zhuǎn)義(保留)17字符串基本操作 +字符串合并 *字符串重復 len(abc)3 abc+defabcdef abc defabcdef hello*4hellohellohellohello abc+9Traceback (most recent call last): File , line 1, in TypeError: cannot concatenate str and int objects18字符串基本操作 可以用for語句在一個字符串中進行迭代,并使用
8、in表達式操作符進行成員關(guān)系的測試,這實際上是一種搜索 for循環(huán)指派了一個變量去獲取一個序列其中的元素,并對每一個元素執(zhí)行一個或多個語句,變量c相當于在字符串中步進的指針 s = hello for c in s:. print c,. h e l l o h in sTrue b in sFalse19字符串索引和分片 字符串是字符的有序集合,能夠通過其位置來獲得他們的元素 Python中字符串中的字符是通過索引提取的 索引從0開始,但不同于C語言的是可以取負值,表示從末尾提取,最后一個是-1,前一個是-2,依次類推,認為是從結(jié)束處反向計數(shù) s = spam s0s s1p s-1m s-
9、2a20字符串索引和分片 分片:從字符串中分離提取了一部分內(nèi)容(子字符串);可以用于提取部分數(shù)據(jù),分離出前、后綴等場合。 當使用一對以冒號分隔的偏移索引字符串這樣的序列對象時,Python就返回一個新的對象,其中包含了以這對偏移所標識的連續(xù)的內(nèi)容。 左邊的偏移被取作是下邊界(包含下邊界在內(nèi)),而右邊的偏移被認為是上邊界(不包括上邊界在內(nèi))。 如果被省略上下邊界的默認值分別對應為0和分片對象的長度 s = spam s1:3pa s1:pam s:-1spa s:spam21索引和分片的總結(jié) 索引(si)獲取特定偏移的元素第一個元素的偏移為0負偏移索引意味著從最后或右邊反向進行計數(shù)s0獲取第一個
10、元素s-2獲取倒數(shù)第二個元素 分片(si:j)提取對應的部分作為一個序列上邊界并不包含在內(nèi)分片的邊界默認為0和序列的長度,如果沒有給出的話s1:3獲取從偏移為1開始,直到但不包含偏移為3的元素s1:獲取了從偏移為1直到末尾之間的元素s:3獲取從偏移為0直到但不包含偏移為3的元素s:-1獲取從偏移為0直到但不包含最后一個元素之間的元素s:獲取從偏移為0直到末尾之間的所有元素22分片的擴展形式 在Python2.3后,分片表達式增加了一個可選的第三個索引,用作步進選取 完整形式為:XI:J:K,這表示:索引(獲?。ο骕中元素,從偏移為I直到J-1,每隔K元素索引一次 K默認為1,這就是通常在切片
11、中從左至右提取每個元素的原因 步進為負數(shù)表示將會從右至左進行而不是從左至右23分片的擴展形式 X1:10:2會取出X中,偏移量1-9之間,間隔一個元素的元素,即獲取偏移量為1、3、5、7、9 s = abcdefghijklmnop s1:10:2bdfhj s:2acegikmo s = 0123456 s:0123456 s:-16543210 s:-26420 s1:5:-1 s5:1:-15432 s9:-16543210 s6:-1:-1 s6:-2:-1624字符串轉(zhuǎn)化 Python不允許字符串和數(shù)字直接相加。 這是有意設計的,因為+既能夠進行加法運算也能夠進行合并運算,這樣的語法
12、會變得模棱兩可,因此,Python將其作為錯誤處理,在Python中,如果讓操作變得復雜或含糊,就會避免這樣的語法 15 + 1Traceback (most recent call last): File , line 1, in TypeError: cannot concatenate str and int objects25字符串轉(zhuǎn)化 如果用戶從文件或用戶界面得到一個作為字符串的數(shù)字,怎么把這個字符串變?yōu)閿?shù)字型呢?這就用到類型的轉(zhuǎn)換函數(shù) s = 42 type(s) i = int(s) type(i) s1 = str(i) type(s1) s = 15 s + 1Traceba
13、ck (most recent call last): File , line 1, in TypeError: cannot concatenate str and int objects int(s) + 116通過明確的手動類型轉(zhuǎn)換再進行+操作26 常用的類型轉(zhuǎn)換還有字符串到浮點型的轉(zhuǎn)換 之后會深入學習內(nèi)置的eval函數(shù),用于運行一個包含了Python表達式代碼的字符串 s = 15.0 float(s)15.0 eval(12)12 eval(12 + 3)1527字符串代碼轉(zhuǎn)換 單個字符可以通過ord函數(shù)轉(zhuǎn)換為對應的ASCII數(shù)值(整數(shù)) chr函數(shù)相反,可以將一個整數(shù)轉(zhuǎn)換為對應的字
14、符 ord(a)97 chr(97)a28修改字符串缺省情況下,字符串對象是“不可變序列”,不可變的意思是不能實地的修改一個字符串那如何改變一個字符串呢?這就要利用合并、分片這樣的工具來建立并賦值給一個新的字符串;必要的話,可以將結(jié)果賦值給字符串最初的變量名 s = spam s0 = xTraceback (most recent call last): File , line 1, in TypeError: str object does not support item assignment s = spam s = s + SPAM sspamSPAM s = s:4 + OK! +
15、 s-1 sspamOK!M29修改字符串 每修改一次字符串就生成一個新的字符串對象,這看起來好像會造成效率下降,其實,在Python內(nèi)部會自動對不再使用的字符串進行垃圾回收,所以,新的對象重用了前面已有字符串的空間 Python的效率比我們想象的要好30字符串格式化 Python可以用%操作符編寫格式化的字符串 格式化字符串:1、在%操作符左側(cè)放置一個需要進行格式化的字符串,這個字符串帶有一個或多個嵌入的轉(zhuǎn)換目標,都以%開頭,如%d、%f等2、在%操作符右側(cè)放置一個對象(或多個,在括號內(nèi)),這些對象會被插入到左側(cè)格式化字符串的轉(zhuǎn)換目標的位置上 bookcount = 10 there are
16、 %d books%bookcountthere are 10 books31字符串格式化 %d %s %d you%(1, spam, 4)1 spam 4 you %s - %s - %s%(42, 3.1415926, 1, 2, 3)42 - 3.1415926 - 1, 2, 3左側(cè)的目標位置都要求是%s(字符串),這就表示要將右邊的對象都轉(zhuǎn)換為字符串另外要注意的是,格式化總會返回新的字符串作為結(jié)果,另外要注意的是,格式化總會返回新的字符串作為結(jié)果,而不是對左側(cè)的字符串進行修改,由于字符串是不可變的;而不是對左側(cè)的字符串進行修改,由于字符串是不可變的;因此,如果需要的話,可以分配一個
17、變量名來保持結(jié)果因此,如果需要的話,可以分配一個變量名來保持結(jié)果32字符串格式化ConversionMeaningdSigned integer decimal.iSigned integer decimal.oSigned octal value.uObsolete type it is identical to d.xSigned hexadecimal (lowercase).XSigned hexadecimal (uppercase).eFloating point exponential format (lowercase).EFloating point exponential
18、format (uppercase).fFloating point decimal format.FFloating point decimal format.gFloating point format. Uses lowercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise.GFloating point format. Uses uppercase exponential format if exponent is less th
19、an -4 or not less than precision, decimal format otherwise.cSingle character (accepts integer or single character string).rString (converts any Python object using repr().sString (converts any Python object using str().%No argument is converted, results in a % character in the result.33字符串的方法capital
20、ize, 將首字母大寫 lower,將字符串中所有字符小寫 center, 填充為指定長度的字符串,并將原字符串放中間 lstrip,去掉字符串左邊指定的字符串,去掉參數(shù)所有字符的組合 count, 返回參數(shù)在字符串中出現(xiàn)的次數(shù) partition,將字符串從指定字符串隔開,結(jié)果為3元組 decode, 按指定格式編碼 replace,替換指定的子字符串 encode, 按指定格式解碼 rfind,查找最右邊的指定的子字符串 endswith, 是否以參數(shù)指定的字符串結(jié)尾 rindex,和rfind類似,只是如果找不到觸發(fā)異常 expandtabs, rjust,右對齊,如果不夠長填充指定的字
21、符 find, 在字符串中查找指定的子字符串,并返回索引 rpartition,類似于partition,只是從右邊開始查找指定字符串 format, 格式化 The sum of 1 + 2 is 0.format(1+2) rsplit,用指定字符分割字符串,并返回列表,如果超過指定數(shù)目,只取右邊的結(jié)果 index, 和find相同,但如果找不到的話觸發(fā)異常 rstrip,類似lstrip,只是去掉右邊指定字串 isalnum, 字符串是否全是字母和數(shù)字 split,將字符串用指定字符分割,返回列表 isalpha, 字符串是否全是字母 splitlines,將一個字符串分割為多個字符串的
22、列表,此字符串必須含有n isdigit, 字符串是否全是數(shù)字(不包括小數(shù)點) startswith,字符串是否以指定前綴開始 islower,字符串是否全是小寫 strip,去掉字符串前后的指定字符串 isspace,字符串是否全是空格 swapcase,將字符串大小寫互換 istitle,字符串單詞是否全部首個字符大寫 title,將每個單詞首字母大寫 isupper,字符串是否全部是大寫 translate,字符的轉(zhuǎn)換,必須要有轉(zhuǎn)換的碼表 join,將列表、元組等元素連接起來 upper,將字符串大寫 ljust,靠左對齊,如果不夠長填充指定的字符 zfill,安指定寬度在字符串左邊填充
23、034字符串總結(jié) 1、如何將字符轉(zhuǎn)為ASCII碼?如何反向轉(zhuǎn)換,將數(shù)字轉(zhuǎn)換為字符? 2、在Python中,如何修改字符串? 3、已知字符串s的值為“s,pa,m”,如何將其用“,”分割成列表?35列表(list) 列表是Python中最具靈活性的有序集合對象類型。和字符串不同的是,列表可以包含任何種類的對象:數(shù)字、字符串、自定義對象甚至其他列表 列表是可變對象,支持在原處修改,可以通過指定的偏移值和分片、列表方法調(diào)用、刪除語句等方法實現(xiàn)36列表的主要性質(zhì) 任意對象的有序集合從功能是看,列表就是收集其他對象的地方,可以他們看成數(shù)組;同時,列表所包含的每一項都保持了從左到右的位置順序(也就是說,它
24、們是序列) 通過偏移讀取和字符串一樣,可以通過列表對象的偏移對其進行索引,從而讀取對象的一部分內(nèi)容。當然也可以執(zhí)行諸如分片和合并之類的操作。37列表的主要性質(zhì) 可變長度、異構(gòu)以及任意嵌套和字符串不同,列表可以根據(jù)需要增長或縮短(長度可變),并且可以包含任何類型的對象,并支持任意的嵌套。 可變序列列表支持在原處的修改,也可以響應所有針對字符串序列的操作,如索引、分片以及合并。實際上,序列操作在列表與字符串中工作方式相同。唯一區(qū)別是:當合并或分片應用于列表時,返回新的列表而不是新的字符串。當然,支持某些字符串不支持的操作。38常用列表常量和操作操作解釋L1=一個空的列表L2 = 0, 1, 2,
25、3四元素列表L3 = abc,10,def, ghi嵌套列表L2i索引L3ij索引的索引L2i:j分片len(L2)求長度L1 + L2合并L2 * 3重復39列表的方法 append(x)把一個元素添加到列表的結(jié)尾,相當于alen(a): = x extend(L)通過添加指定列表的所有元素來擴充列表,相當于alen(a):=L insert(i,x)在指定位置插入一個元素。第一個參數(shù)是準備插入到其前面的那個元素的索引,例如a.insert(0,x)會插入到整個鏈表之前,而a.insert(len(a), x)相當于a.append(x)。40列表的方法 remove(x)刪除鏈表中值為x的
26、第一個元素。如果沒有這樣的元素,就會返回一個錯誤。 pop(i)從鏈表的指定位置刪除元素,并將其返回。如果沒有指定索引,a.pop()返回最后一個元素。元素隨即從鏈表中被刪除。(方法中i兩邊的方括號表示這個參數(shù)是可選的,而不是要求輸入一對方括號,會經(jīng)常在Python庫參考手冊中遇到這樣的標記。)41列表的方法 index(x)返回鏈表中第一個值為x的元素的索引。如果沒有匹配的元素就會返回一個錯誤。 count(x)返回x在鏈表中出現(xiàn)的次數(shù)。 sort()對鏈表中的元素進行適當?shù)呐判颉?reverse()倒排鏈表中的元素。42列表的方法 a = 66.6, 333, 333, 1, 1234.5
27、 print a.count(333), a.count(66.6), a.count(x)2 1 0 a.insert(2, -1) a.append(333) a66.599999999999994, 333, -1, 333, 1, 1234.5, 333 a.index(333)1 a.remove(333) a66.599999999999994, -1, 333, 1, 1234.5, 333 a.reverse() a333, 1234.5, 1, 333, -1, 66.599999999999994 a.sort() a-1, 1, 66.599999999999994, 3
28、33, 333, 1234.543把列表當作堆棧使用 鏈表方法使得鏈表可以很方便的做為一個堆棧來使用,堆棧作為特定的數(shù)據(jù)結(jié)構(gòu),最先進入的元素最后一個被釋放(后進先出)。用append() 方法可以把一個元素添加到堆棧頂。用不指定索引的pop() 方法可以把一個元素從堆棧頂釋放出來。 舉例: st = 3, 4, 5 st.append(6) st.append(7) st3, 4, 5, 6, 7 st.pop()7 st3, 4, 5, 6 st.pop()6 st.pop()5 st3, 444把列表當作隊列使用 也可以把鏈表當做隊列使用,隊列作為特定的數(shù)據(jù)結(jié)構(gòu),最先進入的元素最先釋放(先
29、進先出)。使用append()方法可以把元素添加到隊列最后,以0為參數(shù)調(diào)用pop() 方法可以把最先進入的元素釋放出來。 queue = a, b, c queue.append(d) queue.append(e) queuea, b, c, d, e queue.pop(0)a queueb, c, d, e queue.pop(0)b queuec, d, e45刪除列表元素 可以用del進行 可以刪除某個索引的元素或切片元素 lst = 1, 2, 3 lst1, 2, 3 del lst1 lst1, 3 lst.append(4) lst1, 3, 4 del lst0: lst4
30、6元組 我們知道鏈表和字符串有很多通用的屬性,例如索引和切片操作。它們是序列類型中的兩種。因為Python是一個在不斷進化的語言,也會加入其它的序列類型,另一種標準序列類型:元組。47元組簡介 一個元組由數(shù)個逗號分隔的值組成,例如: t = 12345, 54321, hello t012345 t(12345, 54321, hello) u = t, (1, 2, 3) u(12345, 54321, hello), (1, 2, 3)48元組簡介 如上所示,元組在輸出時總是有括號的,以便于正確表達嵌套結(jié)構(gòu)。 在輸入時,有或沒有括號都可以,不過經(jīng)常括號都是必須的(如果元組是一個更大的表達式
31、的一部分)。49元組 元組有很多用途。例如(x, y)坐標點,數(shù)據(jù)庫中的員工記錄等等。 元組就像字符串,不可改變:不能給元組的一個獨立的元素賦值(盡管可以通過聯(lián)接和切片來模仿) 可以通過包含可變對象來創(chuàng)建元組,例如鏈表。 lst = 1, 2, 3 t = tuple(lst) t(1, 2, 3)50元組 一個特殊的問題是構(gòu)造包含零個或一個元素的元組:為了適應這種情況,語法上有一些額外的改變。一對空的括號可以創(chuàng)建空元組;要創(chuàng)建一個單元素元組可以在值后面跟一個逗號(在括號中放入一個單值是不夠的)。丑陋,但是有效。例如: emp = () emp() single = a, # len(emp)
32、0 len(single)1 single(a,)51元組封裝和解封 語句t = 12345, 54321, hello! 是元組封裝(sequence packing)的一個例子:值12345,54321 和hello! 被封裝進元組。其逆操作可能是這樣: 這個調(diào)用被稱為序列拆封非常合適。序列拆封要求左側(cè)的變量數(shù)目與序列的元素個數(shù)相同。 t = (1, 2, 3) x, y, z = t print x, y, z1 2 352元組封裝和解封 拆封和封裝一點不對稱:封裝多重參數(shù)通常會創(chuàng)建一個元組,而拆封操作可以作用于任何序列。 t = 1, 2, 3 x, y, z = t print x,
33、 y, z1 2 3 s = 123 x,y,z = s print x, y, z1 2 353字典 另一個非常有用的Python內(nèi)建數(shù)據(jù)類型是字典。字典在某些語言中可能稱為“聯(lián)合內(nèi)存”(“associative memories”)或“聯(lián)合數(shù)組”(“associative arrays”)。 字典類似于通過聯(lián)系人名字查找地址和聯(lián)系人詳細情況的地址簿,即:我們把鍵鍵(名字)和值值(詳細情況)聯(lián)系在一起。注意,鍵必須是唯一的,就像如果有兩個人恰巧同名的話,將無法找到正確的信息。 54字典 序列是以連續(xù)的整數(shù)為索引,與此不同的是,字典以關(guān)鍵字為索引 關(guān)鍵字可以是任意不可變類型,通常用字符串或數(shù)值。如果元組中只包含字符串和數(shù)字,它可以做為關(guān)鍵字,如果它直接或間接的包含了可變對象,就不能當做關(guān)鍵字 不能用列表做關(guān)鍵字,因為鏈表可以用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 19970:2025 EN Refrigerated hydrocarbon and non-petroleum based liquefied gaseous fuels - Metering of gas as fuel on LNG carriers during cargo transfer operations
- 知愛防艾健康同行
- 涼鞋制作流程
- 喘病病人的健康指導
- 先天性心臟畸形產(chǎn)前診斷
- 《智能網(wǎng)聯(lián)整車綜合測試》課件-環(huán)形路口通行場景測試評價
- 《社會財務共享服務實務》課件-企業(yè)所得稅的計算
- 預防流感班會課件
- 秋季施工安全培訓
- 消防設施使用培訓大綱
- 貴州2023年高中學業(yè)水平合格性考試地理試卷真題(含答案詳解)
- 乙烯 - 辛烯溶液共聚反應機理及聚合物鏈結(jié)構(gòu)調(diào)控策略探究
- 煤礦隱蔽致災因素普查成果礦井自查表
- 2025至2030年中國橢偏儀行業(yè)市場研究分析及發(fā)展趨向研判報告
- 2025年全國統(tǒng)一高考語文試卷(全國二卷)含答案
- 2025年高考全國二卷數(shù)學高考真題解析 含參考答案
- 鐵路營銷考試題目及答案
- 商場人員出入管理制度
- 工程監(jiān)理資料管理制度
- DB31/T 560-2011道路清掃保潔作業(yè)道班房設置和設計要求
- 2025-2030廢電池回收產(chǎn)業(yè)發(fā)展分析及發(fā)展趨勢與投資前景預測報告
評論
0/150
提交評論