第4章 Python的基本數(shù)據(jù)結(jié)構(gòu)_第1頁
第4章 Python的基本數(shù)據(jù)結(jié)構(gòu)_第2頁
第4章 Python的基本數(shù)據(jù)結(jié)構(gòu)_第3頁
第4章 Python的基本數(shù)據(jù)結(jié)構(gòu)_第4頁
第4章 Python的基本數(shù)據(jù)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章Python基本數(shù)據(jù)結(jié)構(gòu)手把手教你學Python(基礎(chǔ)篇)主要內(nèi)容CONTENTS01列表02元組04集合05字典03字符串01列表Python基本數(shù)據(jù)結(jié)構(gòu)列表list

列表是Python中內(nèi)置的有序可變序列,列表的所有元素放在一對中括號“[]”中,并使用逗號隔開,元素的類型可以不同。列表的定義和創(chuàng)建直接通過一對中括號創(chuàng)建列表對象;使用list()函數(shù)將元組、range對象、字符串或其他類型的可迭代對象轉(zhuǎn)換為列表。刪除列表當不再使用時,可通過del命令刪除列表,刪除后不可再調(diào)用,觀察右邊代碼前后打印時的區(qū)別。a_list=[]#創(chuàng)建空列表

b_list=[20,"張三",177.6]

c_list=list(range(10))a_list=[1,2,3]

print(a_list)

dela_list

print(a_list)Python基本數(shù)據(jù)結(jié)構(gòu)列表元素的訪問創(chuàng)建列表時,將會開辟一塊連續(xù)的空間,用于存放列表元素的引用,每個元素被分配一個序號即元素的位置(也叫索引)。索引值從0開始,從左到右不斷遞增。此外,Python還支持反向索引,也就是從最后一個元素開始計數(shù),此時,索引值從-1開始,從右到左不斷遞減。元素1元素2元素3元素……元素n-1元素n元素索引012……n-2n-1正向索引,從左到右不斷增大元素1元素2元素3元素……元素n-1元素n元素索引-n-n+1-n+2……-2-1反向索引,從右到左不斷減小Python基本數(shù)據(jù)結(jié)構(gòu)列表的切片操作

列表的切片操作是指從一個大列表中,根據(jù)位置特點獲取部分元素組成一個子列表進行返回。語法形式如下:列表對象

[start:end:step]start表示起始位置索引,省略時表示包含end前的所有元素;end表示結(jié)束位置索引,但結(jié)果中不包含結(jié)束位置對應(yīng)的元素,省略時表示包含start后的所有元素;step表示是步長,默認為1,步長可以是正數(shù)也可以是負數(shù),正數(shù)表示從左到右,負數(shù)表示從右到左。Python基本數(shù)據(jù)結(jié)構(gòu)列表的切片操作舉例123456789012345678-9-8-7-6-5-4-3-2-1a_list=list(range(1,10))元素值正向索引反向索引觀察下列程序執(zhí)行結(jié)果:print(a_list[5:])

print(a_list[5::-1])

print(a_list[:5])

print(a_list[:5:-1])print(a_list[2:6])

print(a_list[2:6:2])

print(a_list[2:6:-2])

print(a_list[6:2:-2])print(a_list[-8:6:2])

print(a_list[-2:2:2])

print(a_list[:])

print(a_list[::-1])列表的內(nèi)容修改操作例如:a_list=list(range(10))對某個連續(xù)區(qū)域進行修改:通過切片指定連續(xù)區(qū)域,然后設(shè)置新的內(nèi)容,必須是可迭代對象,迭代對象中元素個數(shù)不限。對單個元素進行修改:通過索引進行定位,然后指定新的內(nèi)容,數(shù)據(jù)類型不限。對某個非連續(xù)區(qū)域進行修改:通過切片指定非連續(xù)區(qū)域,然后設(shè)置新的內(nèi)容,必須是可迭代對象,并且迭代對象中元素個數(shù)與非連續(xù)區(qū)域元素個數(shù)相同。a_list[2]="A"

a_list[4]=[1,2,3][0,1,'A',3,4,5,6,7,8,9][0,1,2,3,[1,2,3],5,6,7,8,9]TypeError:canonlyassignaniterable[0,1,'A','B','C','D',

4,5,6,7,8,9]a_list[1:3]=5

a_list[2:4]=["A","B","C","D"][0,1,'A',3,'B',5,6,7,8,9]ValueError:attempttoassignsequenceofsize3toextendedsliceofsize2a_list[2:6:2]=["A","B"]

a_list[2:6:2]=["A","B","C"]方法作用index(object)獲取列表中某個對象第一次出現(xiàn)的位置,不存在時報錯:ValueErrorcount(object)統(tǒng)計列表中某個對象出現(xiàn)的次數(shù),不存在時返回0append(object)在列表的末尾添加一個對象extend(iterable)將一個可迭代對象合并到列表中去,注意和append()方法的區(qū)別insert(index,object)在列表的指定位置插入一個元素,該位置及后面的元素依次往后移動sort(key,reverse)對列表中的元素進行排序,前提是元素之間可比較,否則會報錯,默認為升序pop(index)刪除列表中指定位置的元素,默認刪除最后一個,并返回刪除的元素remove(object)刪除列表中第一個出現(xiàn)的指定元素reverse()將列表進行逆序clear()清空列表內(nèi)容copy()將列表內(nèi)容復(fù)制一份,是一種淺拷貝列表的常見方法方法作用len(列表)獲取列表中元素的個數(shù)max(列表)獲取列表中最大的元素,前提是列表中元素可比較min(列表)獲取列表中最小的元素,前提是列表中元素可比較sum(列表)對列表中的元素進行求和,前提是列表中元素可執(zhí)行加法運算reversed(列表)將列表進行逆序,返回一個可迭代對象sorted(列表,key,reverse)對列表中的元素進行排序,返回一個新列表。前提是元素之間可比較,否則會報錯,默認為升序列表1+列表2實現(xiàn)兩個列表的合并,并返回一個新的列表列表*整數(shù)將列表中的內(nèi)容復(fù)制若干份,并返回一個新的列表enumerate(列表)生成一個枚舉對象,每個元素為索引和值形成的元組zip(列表1,

列表2)生成一個zip對象,每個元素為列表中對應(yīng)位置元素形成的元組對列表的一些常見操作Python基本數(shù)據(jù)結(jié)構(gòu)列表推導(dǎo)式列表推導(dǎo)式利用已有列表快速生成滿足特定需求的列表。列表推導(dǎo)式在邏輯上相當于一個循環(huán),只是形式更加簡潔。1、生成簡單列表2、從列表中選擇符合條件的元素組成新的列表3、使用多個循環(huán),實現(xiàn)多序列元素的任意組合a_list=[i*iforiinrange(1,10)]

print(a_list)b_list=[iforiinrange(50)ifi%3==0]

print(b_list)c_list=[[x,y,z]forxinrange(2)foryinrange(2)forzinrange(2)]

print(c_list)語法形式:[表達式for

表達式中的變量in

已有序列if過濾條件]課后練習題已知有兩個列表a_list=[4,10,12,4,9,6,3],b_list=[12,8,5,6,7,6,10],編寫程序?qū)崿F(xiàn)以下功能:將兩個列表進行合并,合并時刪除重復(fù)元素,合并結(jié)果存放在c_list中;對c_list按照元素的大小,從大到小進行排序,并打印出排序結(jié)果。已知列表a_list=[4,6,8,6,4,2,6,6,5,7,4,2,1,7,6,7,4],編寫程序統(tǒng)計列表中各元素出現(xiàn)的次數(shù),并將結(jié)果按照下面格式輸出:

元素xxx在列表中出現(xiàn)xxx次02元組元組tuple元組屬于不可變序列,一旦創(chuàng)建,不可修改里面的元素。元組中元素放在一對圓括號“()”中,并用逗號分隔,元素類型可以不同。Python基本數(shù)據(jù)結(jié)構(gòu)元組的定義和創(chuàng)建直接通過一對圓括號創(chuàng)建元組對象;使用tuple()函數(shù)將列表、range對象、字符串或其他類型的可迭代對象轉(zhuǎn)換為元組。刪除元組當不再使用時,可通過del命令刪除元組,刪除后不可再調(diào)用。a_tuple=()#創(chuàng)建空元組

b_tuple=(20,"張三",177.5)

c_tuple=tuple(range(10))注意:當元組中只包含一個元素時,元素后面的逗號不能省略,否則系統(tǒng)會將其看做是其他數(shù)據(jù)類型。元組和列表的聯(lián)系與區(qū)別元組中的數(shù)據(jù)一旦定義就不允許更改,而列表中的數(shù)據(jù)可任意修改;元組沒有append()、extend()和insert()等方法,無法向元組中添加元素。元組沒有remove()或pop()方法,也無法對元組元素進行del操作,不能從元組中刪除元素,但可以刪除整個元組;區(qū)別為什么要提供元組類型?元組的速度比列表更快。元組對不需要改變的數(shù)據(jù)進行“寫保護”將使得代碼更加安全。聯(lián)系元組和列表都屬于可迭代對象,支持索引和切片操作;支持重復(fù)運算(*)和合并運算(+);支持一些系統(tǒng)的內(nèi)置函數(shù),例如len()、max()、min()等;二者之間可相互轉(zhuǎn)化,tuple()將列表轉(zhuǎn)化為元組,list()將元組轉(zhuǎn)化為列表Python基本數(shù)據(jù)結(jié)構(gòu)Python基本數(shù)據(jù)結(jié)構(gòu)生成器推導(dǎo)式推導(dǎo)式只適用于列表,字典和集合,元組沒有推導(dǎo)式。嘗試通過已有序列快速生成滿足特定需求的元組時,產(chǎn)生的是一個生成器對象。生成器推導(dǎo)式的寫法與列表推導(dǎo)式非常類似。語法形式:(表達式for

表達式中的變量in

已有序列if過濾條件)生成器是用來創(chuàng)建Python序列的一個對象。使用它可以迭代龐大序列,且不需要在內(nèi)存創(chuàng)建和存儲整個序列,它的工作方式是每次處理一個對象,而不是一口氣處理和構(gòu)造整個數(shù)據(jù)結(jié)構(gòu)。每次迭代生成器時,它會記錄上一次調(diào)用的位置,并且返回下一個值。可通過tuple()、list()等函數(shù)將其轉(zhuǎn)化為元組或列表。可通過生成器對象的__next__()方法或者系統(tǒng)的next()方法逐個訪問其中的元素。03字符串Python基本數(shù)據(jù)結(jié)構(gòu)字符串str

字符串是由字符組成的一個不可變序列,和元組作用類似,也支持索引、切片、重復(fù)、合并等操作。Python中統(tǒng)一了“字符”和“字符串”的概念,字符串的內(nèi)容放在一對引號中,可以是一對單引號、雙引號或三引號。字符串的定義和創(chuàng)建直接通過一對引號創(chuàng)建字符串對象(對于一些特殊字符可使用轉(zhuǎn)義字符);使用str()函數(shù)將其他類型對象轉(zhuǎn)化為字符串對象。a_str="hello"

b_str=""#創(chuàng)建空字符串

c_str=str()#創(chuàng)建字符串對象

d_str=str(20)#將整型轉(zhuǎn)為字符串

e_str=str([1,2,3])注意:引號可以嵌套使用。單引號里包含雙引號,或雙引號里包含單引號。方法作用index(子串,起點,

終點)在指定區(qū)域中查找子串,不存在時報錯:ValueErrorcount(子串,起點,

終點)統(tǒng)計指定區(qū)域中子串出現(xiàn)的次數(shù),不存在時返回0split(分隔符,最多分割次數(shù))按照分隔符對字符串進行分割,返回結(jié)果列表lower()、upper()將字符串中所有字母轉(zhuǎn)化為?。ù螅懽帜?,生成一個新字符串swapcase()轉(zhuǎn)變字符串中所有字母的大小寫,生成一個新字符串replace(舊字符,新字符,

次數(shù))替換字符串中的指定元素,可指定替換次數(shù),默認替換所有join(可迭代對象)用字符串將可迭代對象中的多個元素拼接起來startswith(字符串,起點,

終點)判斷字符串的指定區(qū)域是否以指定的字符串開始,結(jié)果為True或Falseendswith(字符串,起點,

終點)判斷字符串的指定區(qū)域是否以指定的字符串結(jié)束,結(jié)果為True或Falsecenter(寬度,填充字符)指定字符串顯示寬度,內(nèi)容居中顯示,左右兩邊填充指定字符strip(字符)去除字符串前后的字符,默認去除前后空白字符串的常見方法字符串常見方法輸入一個字符串,判斷是否為回文字符串,即從左到右和從右到左是否一致。輸入一個字符串,刪除字符串中重復(fù)出現(xiàn)的字符。輸入兩個字符串,從第一個字符串中刪除第二個字符串中所有字符。輸入一個字符串,將字符串中的所有數(shù)字取出,形成一個新的字符串。isdigit():判斷字符串中所有字符是否都為數(shù)字isalpha():判斷字符串中所有字符是否都為字母,廣義上的字母isalnum():判斷字符串中所有字符是否都為數(shù)字或字母isidentifier():判斷字符串是否為合法標識符字符串應(yīng)用舉例字符串的格式化輸出fill:設(shè)置空白處填充的字符,默認為空格;align:設(shè)置對齊方式(結(jié)合寬度來使用):(左對齊:<;右對齊:>;居中對齊:^)sign:有無符號數(shù)字,+,正數(shù)前加+;-:正數(shù)前無符號;空格:正數(shù)前顯示空格#:對于二進制、八進制、十六進制,顯示前面的0b、0o、0x,否則不顯示,:為數(shù)字添加分隔符,例如:1,000,000width:格式化所占寬度.precision:小數(shù)位保留的精度,小數(shù)點不可省略。type:格式化類型,s為字符串,b為二進制整數(shù),c為字符,d為10進制整數(shù),o為八進制整數(shù),x為十六進制整數(shù),e為科學計數(shù)法,f為浮點數(shù),g自動在e和f之間轉(zhuǎn)化,%為百分比。Python中提供了多種方式實現(xiàn)字符串的格式化,其中最為常見的就是百分號方式(古老)和Format方式(新)。[[fill]align][sign][#][0][width][,][.precision][type]字符串的格式化舉例print("年齡:{},身高:{}".format(20,177))

print("年齡:{1},身高:{0}".format(177,20))

print("年齡:{1},身高:{0},體重:{0}".format(177,20))

print("年齡:{1},身高:{0}".format(*[177,20]))

print("年齡:{age},身高:{height}".format(height=175,age=18))用一對大括號{}進行占位,可指定對應(yīng)參數(shù)的位置或參數(shù)的名稱,什么都不指定時按照默認順序賦值。print("當前時間為:{:02}:{:02}".format(9,17))

print("幾種對齊方式的區(qū)別:{0:<10}、{0:>10}、{0:^10}。".format("abc"))

print("11除以3保留2位有效數(shù)字為:{:.2f}".format(11/3))

print("正數(shù)前面顯示正號,例如:{0:8}、{0:+8}".format(10))

print("顯示進制前面的符號,例如:{0:#o}、{0:#b}、{0:#x}".format(20))

print("為數(shù)字添加分隔符,例如:{0:,}、{0}".format(1000000))注意:需要控制輸出格式時,需加冒號隔開;控制符號的順序不能錯;課后練習題已知列表a_list=[4,8,7,8,6,3],編寫程序刪除列表中重復(fù)的數(shù)字(保留第一個),然后將其轉(zhuǎn)化為字符串”

48763”。(刪除重復(fù)元素、列表轉(zhuǎn)字符串)輸入一個字符串,輸出該字符串中出現(xiàn)頻數(shù)最高的字符,如果有多個字母出現(xiàn)的頻數(shù)并列最高,則輸出多個字母。(統(tǒng)計字符出現(xiàn)的頻數(shù))04集合集合set集合是無序可變?nèi)萜?,集合中元素放在一對大括號“{}”中,并用逗號分隔,元素類型可以不同,但集合中元素不能重復(fù)。集合中不能包含可變元素,例如列表。Python基本數(shù)據(jù)結(jié)構(gòu)集合的定義和創(chuàng)建直接通過一對大括號包裹元素創(chuàng)建集合對象;使用set()函數(shù)將列表、range對象、字符串或其他類型的可迭代對象轉(zhuǎn)換為集合,此時會刪除其中的重復(fù)元素。刪除集合當不再使用時,可通過del命令刪除集合,刪除后不可再調(diào)用。a_set={20,"張三",177.5}

b_set=set()#創(chuàng)建空集合

c_set=set(range(10))注意:不能直接通過a={}創(chuàng)建空集合,此時創(chuàng)建的是一個空字典。Python基本數(shù)據(jù)結(jié)構(gòu)集合中的元素是無序可變不重復(fù)的,不支持索引、切片等操作??赏ㄟ^循環(huán)遍歷集合中的所有元素。add(元素):向集合中添加一個元素,元素為不可變類型,不能是列表、集合等可變類型,如果該元素已存在則沒什么變化;update(可迭代對象):將可迭代對象中的元素依次添加到集合中去,去除重復(fù)元素;copy():將集合復(fù)制一份;pop():隨機刪除一個元素,并返回刪除的元素;remove(元素):從集合中刪除某個元素,如果該元素不存在,則拋出錯誤KeyError;discard(元素):從集合中刪除某個元素,如果該元素不存在,則什么都不做;clear():清空集合內(nèi)容;集合的常見操作Python基本數(shù)據(jù)結(jié)構(gòu)

Python中集合支持交集、并集、差集、對稱差集等運算。交集:集合A和集合B的交集由既屬于A又屬于B的元素構(gòu)成。集合A&集合B

集合A.intersection(集合B)并集:集合A和集合B的并集由屬于A或?qū)儆贐的元素構(gòu)成。

集合A|集合B

集合A.union(集合B)差集:集合A和集合B的差集由屬于A但不屬于B的元素構(gòu)成。

集合A-集合B

集合A.difference(集合B)對稱差集:集合A和集合B的對稱差集由A和B的差集或B和A的差集組成。

集合A^集合B 集合A.symmetric_difference(集合B)判斷集合A是否為集合B的子集

集合A.issubset(集合B)

集合A<=集合B判斷集合A是否為集合B的父集

集合A.issuperset(集合B)

集合A>=集合B集合運算Python基本數(shù)據(jù)結(jié)構(gòu)集合推導(dǎo)式寫法類似于列表推導(dǎo)式,只是用一對大括號表示,而不是一對中括號。同時會去除結(jié)果中的重復(fù)元素。集合推導(dǎo)式語法形式:{表達式for

變量in

已有序列if過濾條件}a_set={x*xforxinrange(-5,5)}

b_set={x*2forxin["A","B","A",2,4,2]}

c_set={x*2forxin["A","B","A",2,4,2]ifstr(x).isdigit()}

d_set={xforxin[2,4,6,8]ifxin[1,3,6,4]}#求交集

e_set={xforxin[2,4,6,8]ifxnotin[1,3,6,4]}#求差集

f_set={x+yforxin[2,4,6,8]foryin[1,3,5]}集合推導(dǎo)式舉例:05字典字典dict字典是一種映射類型,由若干”鍵(key):值(value)”組成,

“鍵”和“值”之間用冒號隔開,所有“鍵值對”放在一對大括號“{}”內(nèi),并用逗號分隔。其中“鍵”必須為不可變類型,在同一個字典中,“鍵”必須是唯一的,但“值”可以重復(fù)。Python基本數(shù)據(jù)結(jié)構(gòu)字典的定義和創(chuàng)建直接通過一對大括號包裹鍵值對創(chuàng)建字典對象;使用dict()函數(shù)創(chuàng)建字典對象。a_dict={}#創(chuàng)建空字典

b_dict={"姓名":"張三","年齡":20}

c_dict=dict(name="張三",age=20)

d_dict=dict([("體重",156),("身高",177)])注意:將可迭代對象轉(zhuǎn)化為字典時,要求可迭代對象中每個元素的長度為2。Python基本數(shù)據(jù)結(jié)構(gòu)字典元素的訪問字典是無序的,因此不支持索引、切片等操作。主要通過字典對象[鍵]獲取對應(yīng)的值。此外,字典還提供了獲取所有鍵值對、所有鍵、所有值等方法。例如:a_dict={"姓名":"張三","年齡":20,"體重":172,"身高":172}print(a_dict["姓名"])

print(a_dict["體重"])

print(a_dict["籍貫"])“鍵”不存在時,報錯。輸出所有鍵值對輸出所有鍵輸出所有值通過字典對象[鍵]獲取對應(yīng)的值。通過提供的方法獲取整體信息。print(a_dict.items())

print(a_dict.keys())

print(a_dict.values())張三172KeyError:'籍貫'可通過循環(huán)依次遍歷每一個元素Python基本數(shù)據(jù)結(jié)構(gòu)字典對象的常用方法get(鍵,默認值):獲取字典中指定鍵對應(yīng)的值,如果不存在該鍵,則返回默認值;setdefault(鍵,默認值):為指定的鍵設(shè)置默認值,如果沒有對該鍵賦值,則取值為默認值;update(字典):將指定字典的元素一次性添加到當前字典對象中,如果兩個字典存在相同的“鍵”,則只保留最新的鍵值對;fromkeys(序列,默認值):以序列中元素為鍵,創(chuàng)建一個新的字典;pop(鍵):從字典中刪除指定的鍵,返回該鍵對應(yīng)的值;copy():將字典復(fù)制一份。Python基本數(shù)據(jù)結(jié)構(gòu)字典推導(dǎo)式字典推導(dǎo)式的寫法和集合推導(dǎo)式的寫法類似,也是放在一對大括號中。表達式中包含鍵和值兩部分,并分別指定這兩部分的值。語法形式:{鍵表達式:值表達式for

變量in

已有序列if過濾條件}a_list="aEBCdF"

b_list=[2,5,6,7,10]

a_dict={key:valueforkey,valueinzip(a_list,b_list)}

b_d

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論