Python編程基礎(chǔ)與應(yīng)用第6章 組合數(shù)據(jù)類型_第1頁
Python編程基礎(chǔ)與應(yīng)用第6章 組合數(shù)據(jù)類型_第2頁
Python編程基礎(chǔ)與應(yīng)用第6章 組合數(shù)據(jù)類型_第3頁
Python編程基礎(chǔ)與應(yīng)用第6章 組合數(shù)據(jù)類型_第4頁
Python編程基礎(chǔ)與應(yīng)用第6章 組合數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

6

組合數(shù)據(jù)類型XXXX

大學(xué)XX

學(xué)院XXX

教授2學(xué)習(xí)目標(biāo):了解序列數(shù)據(jù)類型及其內(nèi)置函數(shù)熟悉可迭代對象與迭代器掌握字符串及其操作方法掌握列表及其操作方法掌握元組及其操作方法掌握字典及其操作方法思政內(nèi)涵:只有具有優(yōu)秀的數(shù)據(jù)結(jié)構(gòu)才能具有強大的數(shù)據(jù)處理功能,廣大學(xué)子要樹立團隊結(jié)構(gòu)優(yōu)化意識,積極培養(yǎng)領(lǐng)導(dǎo)能力和組織能力。第

6

組合數(shù)據(jù)類型3

6.1

概述Python

的組合數(shù)據(jù)類型就是容器,可以把多個相同或不同類型的數(shù)據(jù)組織為一個整體。使用組合數(shù)據(jù)類型定義和記錄數(shù)據(jù),不僅能更清晰地表達數(shù)據(jù),也極大地簡化了程序員的開發(fā)工作,提升了程序的開發(fā)效率。根據(jù)數(shù)據(jù)組織方式的不同,可以分為三大類:序列類型、集合類型和映射類型。6.1.1

序列類型序列類型來源于數(shù)學(xué)概念中的數(shù)列。數(shù)列是按一定順序排成一列的一組數(shù),每個數(shù)稱為這個數(shù)列的項,每項不是在其他項之前,就是在其他項之后。存儲n項元素的數(shù)列{an}的定義如下。{an}=a0,a1,

a2...an-14數(shù)列的索引從

0

開始,通過索引n可以訪問數(shù)列中的第n-1

項。序列類型在數(shù)列的基礎(chǔ)上進行了擴展,Python

中的序列支持雙向索引,即正向遞增索引和反向遞減索引。正向遞增索引從左向右依次遞增,第

1

個元素的索引為

0,第

2

個元素的索引為

1,以此類推;反向遞減索引從右向左依次遞減,從右數(shù)第

1

個元素的索引為-1,第

2

個元素的索引為-2,以此類推。Python

的序列類型非常豐富,包括字符串(str)、列表(list)、元組(tuple)和字節(jié)組(bytes)等。序列類型常用操作的內(nèi)置函數(shù)如表

6-1

所示。表

6-1 序列類型常用操作的內(nèi)置函數(shù)函數(shù)名 功能描述統(tǒng)計len() 計算序列的長度,即返回序列中包含的元素的個數(shù)第

6

組合數(shù)據(jù)類型5sum()計算元素和。對序列使用sum()函數(shù)時,操作的必須都是數(shù)字,不能是字符或字符串,否則該函數(shù)將拋出異常max()找出序列中的最大元素min()找出序列中的最小元素排序sorted()對元素進行排序reversed()反轉(zhuǎn)序列中的元素enumerate()將序列組合為一個索引序列,多用在for

循環(huán)中序列數(shù)據(jù)操作的示例代碼如程序段P6.1

所示。P6.1

序列類型內(nèi)置函數(shù)tp=(10,25,16,8,32) #

定義元組,也可定義其他序列數(shù)據(jù)類型6#

序列最大、最小、求和#

反向排序,返回新對象#

組合為一個新對象print(max(tp),min(tp),sum(tp))print(sorted(tp))temp1=reversed(tp)print(temp1)print(list(temp1))temp2=

enumerate(tp)print(temp2)print(list(temp2))運行代碼,輸出結(jié)果如下。32 8 91[8,10,16,25,

32]<reversedobjectat

0x0000021C21D93520>第

6

組合數(shù)據(jù)類型7[32,8,16,25,

10]<enumerateobjectat

0x0000021C1FD96240>[(0,

10),

(1,

25),

(2,

16),

(3,

8),

(4,

32)]集合類型數(shù)學(xué)中的集合是指具有某種特定性質(zhì)的對象匯總而成的集體,其中,組成集合的對象稱為該集合的元素。例如,成年人集合的每個元素都是已滿

18

周歲的人。通常用大寫字母表示集合,用小寫字母表示集合中的元素。集合中的元素具有以下

3

個特征。確定性:集合中的每個元素都是確定的?;ギ愋裕杭现械脑鼗ゲ幌嗤?(3)

無序性:集合中的元素沒有順序,若多個集合中的元素僅順序不同,那么這些集合本質(zhì)上是同一集合。集合(set)是Python

內(nèi)置的集合類型,也具備以上

3

個特征。Python

要求放入集合中的元素必須是不可變類型(Python

中的整型、浮點型、字符串類型和元組屬于不可變類型;列表、字典和集合本身都屬于可變的數(shù)據(jù)類型)。6.1.3 映射類型映射類型以鍵值對的形式存儲元素,鍵值對中的鍵與值之間存在映射關(guān)系。在數(shù)學(xué)中,設(shè)

A、B

是兩個非空集合,若按某個確定的對應(yīng)法則

f,使集合

A

中的任意一個元素x

在集合B

中都有唯一確定的對應(yīng)元素y,則f

稱為從集合A到集合B

的一個映射。字典(dict)是Python

唯一的內(nèi)置映射類型,字典的鍵必須遵循以下兩個原則。第

6

組合數(shù)據(jù)類型9(1)

每個鍵只能對應(yīng)一個值,不允許同一個鍵在字典中重復(fù)出現(xiàn)。(2)

字典中的鍵是不可變類型。6.1.4

可迭代對象與迭代器容器(container)是一種把多個數(shù)據(jù)元素組織在一起的數(shù)據(jù)結(jié)構(gòu),可以用關(guān)鍵字in

或not

in

判斷元素是否包含在容器中,并且可以逐個地迭代獲取容器中的元素。盡管絕大多數(shù)容器都提供了某種方式來獲取其中的每個元素,但這并不是容器本身具有的能力,而是可迭代對象賦予了容器這種能力。在Python中,字符串、列表、元組、集合與字典等組合數(shù)據(jù)類型都是常見的容器,這些容器可以通過

for

循環(huán)來遍歷,這種遍歷稱為迭代(iteration)。因此,這些容器就是可迭代對象(iterable)。此外,打開的文件也是可迭代對象。簡單來說,一個具有iter

方法的對象就可以稱為可迭代對象。迭代器(iterator)是一個可以記住遍歷位置的對象,因此不會像列表那樣一10次性全部生成,而是可以等到需要的時候再生成,從而節(jié)省了大量的內(nèi)存空間。迭代器對象從容器中的第一個元素開始訪問,直到所有的元素被訪問完。Python

迭代器對象必須實現(xiàn)兩個特殊的方法:

iter

()和

next

()方法。內(nèi)置函數(shù)iter()可以把可迭代對象轉(zhuǎn)換為迭代器對象,它是一個帶狀態(tài)的對象,該狀態(tài)用于記錄當(dāng)前迭代所在的位置,以便在下次迭代時獲取正確的元素。當(dāng)調(diào)用next()方法時,迭代器將返回容器中的下一個值。常見的迭代器類型包括

list_iterator、set_iterator、tuple_iterator、str_iterator

等。示例代碼如程序段P6.2

所示。P6.2

iter()從可迭代對象創(chuàng)建迭代器l=[1,2,3]x=iter(l)print(type(x))print(next(x))第

6

組合數(shù)據(jù)類型11print(next(x))print(next(x))print(next(x))運行代碼,輸出結(jié)果如下。<class

'list_iterator'>123Traceback(mostrecentcall

last):File"D:/x.py",line6,in

<module>print(next(x))StopIteration12在Python

中,for

循環(huán)實際上是通過迭代器工作的,每次迭代就是調(diào)用迭代器的next()方法來獲取下一個元素。當(dāng)容器中的所有元素全部被訪問完后,迭代器會發(fā)出一個StopIteration

異常,for

語句只要捕獲這個異常,就知道迭代何時結(jié)束。知道了

for

循環(huán)的工作原理后,就可以用程序模擬

for

循環(huán),示例代碼如程序段P6.3

所示。P6.3

模擬for

循環(huán)l=[1,2,3]d=iter(l)while

True:try:e=next(d)print(e)except

StopIteration:第

6

組合數(shù)據(jù)類型13break運行代碼,輸出結(jié)果如下。123在

Python

中,我們可以很容易地自定義可迭代對象和迭代器,只需要實現(xiàn)

iter

()和

next

()方法即可。

iter

()方法返回迭代器對象本身,并且可以在需要時執(zhí)行一些初始化操作。

next

()方法必須返回序列中的下一項,在到達終點時及在隨后的調(diào)用中,它必須引發(fā)

StopIteration

異常。示例代碼如程序段P6.4

所示。P6.4

自定義迭代器class

MyIterable:14def

init

(self,

max=0):self.max=

maxdef

iter

(self):self.n=0return

selfdef

next

(self):ifself.n<=self.max:result=

self.n*self.nself.n+=

1return

resultelse:raise

StopIterationn=

MyIterable(2)第

6

組合數(shù)據(jù)類型15myIterator=iter(n)print(next(myIterator))print(next(myIterator))print(next(myIterator))print(next(myIterator))運行代碼,輸出結(jié)果如下。014Traceback(mostrecentcall

last):File"D:/x.py",line20,in

<module>print(next(myIterator))16File"D:/x.py",line

14,

in

next

raise

StopIterationStopIteration下面通過for

循環(huán)來訪問自定義可迭代對象,示例代碼如程序段

P6.5

所示。P6.5

for

循環(huán)訪問MyIterable

可迭代對象numbers=

MyIterable(2)foriin

numbers:print(i)運行代碼,輸出結(jié)果如下。014第

6

組合數(shù)據(jù)類型17結(jié)果說明,通過前面自定義的可迭代類,我們成功創(chuàng)建了可迭代對象,并且在使用for

循環(huán)時能夠成功遍歷可迭代對象。當(dāng)使用Python

迭代器操作組合數(shù)據(jù)類型時,具有節(jié)省資源、減少代碼冗余、降低代碼復(fù)雜度和提高編碼穩(wěn)定性等優(yōu)點。

6.2 字符串6.2.1

字符串概述字符串的操作在實際應(yīng)用中非常常見。Python

內(nèi)置了很多字符串方法,使用這些方法可以輕松實現(xiàn)字符串的查找、替換、拼接、大小寫轉(zhuǎn)換等操作。但需要注意的是,字符串一旦創(chuàng)建便不可修改;若對字符串進行修改,就會生成新的字符串。字符串的常用操作方法如表

6-2

所示。18表

6-2字符串的常用操作方法方法名功能描述查找修改find()用于查找字符串中是否包含指定的子字符串。若包含,則返回子字符串首次出現(xiàn)的索引位置;否則返回-1index()同樣用于檢索是否包含指定的子字符串,與find()方法的區(qū)別在于,當(dāng)指定的子字符串不存在時,index()方法會拋出異常count()用于檢索指定的字符串在另一字符串中出現(xiàn)的次數(shù)rfind()和find()功能相同,但查找方向從右側(cè)開始rindex()和index()功能相同,但查找方向從右側(cè)開始第

6

組合數(shù)據(jù)類型19replace()replace(舊子串,新子串

[,替換次數(shù)]),將舊子串替換成新子串,若替換次數(shù)超過子串出現(xiàn)次數(shù),則替換子串出現(xiàn)次數(shù)split()用于將一個字符串按照指定的分隔符切分成多個子串join()用一個字符或子串合并字符串,即將多個字符串合并為一個新的字符串capitalize()將字符串的第一個字母轉(zhuǎn)換成大寫,將其他字母轉(zhuǎn)換成小寫title()將字符串中每個單詞的首字母都轉(zhuǎn)換成大寫,將其他字母轉(zhuǎn)換成小寫lower()將字符串中的大寫字母都轉(zhuǎn)換成小寫字母upper()將字符串中的小寫字母都轉(zhuǎn)換成大寫字母刪除空白strip()刪除字符串兩側(cè)的空白符lstrip()刪除字符串左側(cè)的空白符rstrip()刪除字符串右側(cè)的指定字符,默認刪除字符串右側(cè)的空白符20對齊判斷。ijust()返回一個原字符串左對齊,并使用指定字符(默認空格)填充至對應(yīng)長度的新字符串rjust()返回一個原字符串右對齊,并使用指定字符(默認空格)填充至對應(yīng)長度的新字符串center()返回一個原字符串居中對齊,并使用指定字符(默認空格)填充至對應(yīng)長度的新字符串startswith()檢查字符串是否以指定子字符串開頭。若是,則返回True;否則返回False如果設(shè)置開始和結(jié)束位置下標(biāo),則在指定范圍內(nèi)檢查isalpha()如果字符串中至少有一個字符并且所有字符都是字母,則返回True;否則返回False第

6

組合數(shù)據(jù)類型21isdigit()如果字符串只包含數(shù)字字符,則返回True;否則返回Falseisalnum()如果字符串至少有一個字符并且所有字符都是字母或數(shù)字,則返回

True否則返回Falseisspace()如果字符串中只包含空白字符,則返回True;否則返回False;字符串的操作方法字符串的查找1)

find()與rfind()find()方法用于查找字符串中是否包含指定的子字符串。若包含,則返回子字符串首次出現(xiàn)的索引位置;否則返回-1。find()方法的語法格式如下。string.find(sub[,start[,end]])參數(shù)說明如下。22

sub:指定要查找的子字符串。start:開始索引,默認為

0。end:結(jié)束索引,默認為字符串的長度。示例代碼如程序段P6.6

所示。P6.6

字符串查找string=

""n1=

string.find('.')n2=

string.find('.',7)#

首次出現(xiàn)“.”的位置#

起始索引

7#

起始索引

7,結(jié)束索引-3#

從字符串右側(cè)開始檢索n3=

string.find('.',7,-3)n4=

string.rfind('.')print(n1,n2,n3,n4)運行代碼,輸出結(jié)果如下。第

6

組合數(shù)據(jù)類型236 13 -1 132)

index()與rindex()index()方法也可以用于檢索是否包含指定的子字符串,與find()方法的區(qū)別在于,當(dāng)指定的子字符串不存在時,index()方法會拋出異常。index()方法的語法格式如下。string.index(sub[,start[,end]])

參數(shù)說明如下。sub:表示要檢索的子字符串。start:表示檢索的起始位置,如果不指定,默認從頭開始檢索。end:表示檢索的結(jié)束位置,如果不指定,默認一直檢索到結(jié)尾。示例代碼如程序段P6.7

所示。P6.7

字符串索引24#

首次出現(xiàn)

“.”

的位置#

起始索引

7#

起始索引

7,結(jié)束索引-3#

從字符串右側(cè)開始檢索string=

""n1=string.index('.')n2=

string.index('.',7)n3=

string.index('.',7,-1)n4=string.rindex('.')print(n1,n2,n3,n4)運行代碼,輸出結(jié)果如下。6 13 13 133)

count()count()方法用于檢索指定的字符串在另一字符串中出現(xiàn)的次數(shù)。如果檢索第

6

組合數(shù)據(jù)類型25的字符串不存在,則返回

0;否則返回出現(xiàn)的次數(shù)。count()方法的語法格式如下。string.count(sub[,start[,end]])

參數(shù)說明如下。sub:表示要檢索的字符串。start:指定檢索的起始位置,如果不指定,默認從頭開始檢索。end:指定檢索的結(jié)束位置,如果不指定,默認一直檢索到結(jié)尾。示例代碼如程序段P6.8

所示。P6.8

字符統(tǒng)計string=

""n1

=

string.count('o') #

出現(xiàn)“o”的次數(shù)n2

=

string.count('o',5)

#

起始索引

526n3

=

string.count('o',5,-4)

#

起始索引

5,結(jié)束索引-4print(n1,n2,n3)運行代碼,輸出結(jié)果如下。3 2 12.

字符串的修改1)

replace()replace()方法用于將當(dāng)前字符串中的指定子串替換成新的子串,并返回替換后的新字符串。replace()方法的語法格式如下。string.replace(old,new[,

count])

參數(shù)說明如下。old:被替換的舊子串。第

6

組合數(shù)據(jù)類型27

new:替換舊子串的新子串。

count:表示替換舊字符串的次數(shù),默認全部替換。2)

split()split()方法用于將一個字符串按照指定的分隔符切分成多個子串,這些子串會被保存到列表中(不包含分隔符),作為方法的返回值反饋回來。split()方法的語法格式如下。string.split(sep,maxsplit)

參數(shù)說明如下。sep:分隔符,默認為空格符。maxsplit:分隔次數(shù),默認值為-1,表示不限制分隔次數(shù)。3)

join()join()方法用于將列表(或元組)中包含的多個字符串連接成一個字符串。它28是split()方法的逆方法。join()方法的語法格式如下。new_string=

string.join(iterable)參數(shù)說明如下。

string:用于指定合并時的分隔符。iterable:做合并操作的源字符串?dāng)?shù)據(jù),允許以列表、元組等形式提供。4)

capitalize()capitalize()方法用于將字符串的第一個字母轉(zhuǎn)換為大寫,將其他字母轉(zhuǎn)換為小寫,該方法返回一個首字母大寫的字符串,語法格式如下。string.capitalize()5)

title()title()方法返回“標(biāo)題化”的字符串,即所有單詞的首字母都大寫,其余字母均為小寫,語法格式如下。第

6

組合數(shù)據(jù)類型29string.title()upper()upper()方法用于將字符串中的小寫字母轉(zhuǎn)換為大寫字母,返回小寫字母轉(zhuǎn)換為大寫字母的字符串,語法格式如下。string.upper()lower()lower()方法用于將字符串中的小寫字母轉(zhuǎn)換為大寫字母,返回小寫字母轉(zhuǎn)換為大寫字母的字符串,語法格式如下。string.lower()字符串修改的示例代碼如程序段P6.9

所示。P6.9

字符串修改sr='helloahucode,hello

python'30sr1=

sr.replace('hello','HELLO',1)print(sr1)sr2=

sr1.split()print(sr2)sr3='

'.join(sr2)print(sr3)sr4=

sr3.lower()print(sr4)sr5=

sr4.capitalize()print(sr5)sr6=

sr5.title()print(sr6)sr7=

sr6.upper()第

6

組合數(shù)據(jù)類型31print(sr7)運行代碼,輸出結(jié)果如下。HELLOahucode,hellopython['HELLO','ahu','code,hello',

'python']HELLOahucode,hello

pythonhelloahucode,hellopythonHelloahucode,hellopythonHelloAhuCode,Hello

PythonHELLOAHUCODE,HELLO

PYTHON3.

刪除字符串的空白1)

strip()strip()方法用于刪除字符串首尾指定的字符,語法格式如下。32string.strip([chars])參數(shù)說明如下。

chars:刪除字符串首尾指定的字符(默認為空格)。2)

lstrip()lstrip()方法用于刪除字符串左側(cè)指定的字符,返回的是一個新字符串,語法格式如下。string.lstrip([chars])

參數(shù)說明如下。chars:指定刪除的字符(默認為空格)。3)

rstrip()rstrip()方法用于刪除字符串右側(cè)的指定字符,默認刪除字符串右側(cè)的空白第

6

組合數(shù)據(jù)類型33字符,返回的是一個新的字符串,語法格式如下。str.rstrip([chars])

參數(shù)說明如下。chars:指定刪除的字符(默認為空格)。刪除指定字符的示例代碼如程序段P6.10

所示。P6.10

字符串的刪除sr='xxxyyyhelloahucode,hellopython

zzxx'sr1=

sr.strip('x')print(sr1)sr2=

sr1.lstrip('y')print(sr2)sr3=

sr2.rstrip('z')34print(sr3)sr4=

sr3.strip()print(sr4)運行代碼,輸出結(jié)果如下。yyyhelloahucode,hellopythonzzhelloahucode,hellopython

zzhelloahucode,hello

pythonhelloahucode,hello

python4.

字符串的對齊1)

ljust()ljust()方法用于返回一個原字符串左對齊,并使用空格填充至指定長度的新字符串。如果指定的長度小于原字符串的長度,則返回原字符串。ljust()方法的第

6

組合數(shù)據(jù)類型35語法格式如下。string.ljust(width[,fillchar])

參數(shù)說明如下。width:指定字符串長度。fillchar:填充字符,默認為空格。2)

rjust()rjust()方法用于返回一個原字符串右對齊,并使用空格填充至指定長度的新字符串。如果指定的長度小于字符串的長度,則返回原字符串。rjust()方法的語法格式如下。string.rjust(width[,fillchar])3)

center()center()方法用于返回一個寬度為width,原字符串居中,并以fillchar(默36認為空格)填充左右兩邊的字符串。center()方法的語法格式如下。string.center(width[,fillchar])字符串對齊的示例代碼如程序段P6.11

所示。P6.11

字符串對齊sr='ahucode,hello

python'print(sr.ljust(40,'*'))print(sr.rjust(40,'$'))print(sr.center(40,'%'))運行代碼,輸出結(jié)果如下。ahucode,hello

python*******************$$$$$$$$$$$$$$$$$$$ahucode,hello

python%%%%%%%%%ahucode,hello

python%%%%%%%%%%第

6

組合數(shù)據(jù)類型375.

字符串的判斷1)

startswith()與endswith()startswith()方法用于檢查字符串是否以指定子字符串開頭。如果是,則返回

True;否則返回

False。如果參數(shù)

start

和end

為指定值,則在指定范圍內(nèi)檢查。startswith()方法的語法格式如下。string.startswith(prefix[,start[,end]])

參數(shù)說明如下。prefix:檢測的字符串。start:可選參數(shù),用于設(shè)置字符串檢測的起始位置。end:可選參數(shù),用于設(shè)置字符串檢測的結(jié)束位置。endswith()方法與startswith()方法的語法格式一樣,只是檢測結(jié)尾字符串。2)

isalpha()38如果字符中至少有一個字符并且所有字符都是字母,則返回

True;否則返回False。isalpha()方法的語法格式如下。string.isalpha()isdigit()isdigit()方法用于檢查字符串中是否只包含數(shù)字字符。若字符串中只包含數(shù)字字符,則返回

True;否則返回

False。isdigit()方法的語法格式如下。string.isdigit()isalnum()如果字符串中至少有一個字符并且所有字符都是字母或數(shù)字,則返回

True;否則返回False。isalnum()方法的語法格式如下。string.isalnum()isspace()第

6

組合數(shù)據(jù)類型39isspace()方法用于檢查字符串是否只包含空白字符,語法格式如下。string.isspace()字符串判斷的示例代碼如程序段P6.12

所示。P6.12

字符串判斷sr='ahucode,hellopython'print(sr.startswith('ahu'),sr.endswith('python'))print(sr.isalpha(),sr.isdigit(),sr.isalnum(),sr.isspace())運行代碼,輸出結(jié)果如下。True

TrueFalseFalseFalse

False40

6.3

列表Python

利用內(nèi)存中的一段連續(xù)空間存儲列表。列表是

Python

中最靈活的序列類型,它沒有長度的限制,可以包含任意元素。開發(fā)人員可以自由地對列表中的元素進行各種操作,包括訪問、添加、排序、刪除。列表的常用操作方法如表

6-3

所示。表

6-3

列表的常用操作方法方法名 功能描述添加insert()按照索引將新元素插入列表的指定位置append()在列表的末尾添加一個元素extend()在列表末尾一次性添加另一個列表中的所有元素(續(xù)表)第

6

組合數(shù)據(jù)類型41方法名功能描述排序刪除sort()列表中索引元素默認按照從小到大的順序進行排列,可以指定reverse=Ture,進行降序排列reverse()用于逆置列表,即把原列表中的元素從右至左依次排列存放remove()一次刪除一個元素,若元素重復(fù)則只刪除第一個,若元素不存在則拋出ValueErrorpop()刪除一個指定索引位置上的元素。若指定索引不存在,則拋出IndexError;若不指定索引,則刪除列表中最后一個元素clear()清空列表426.3.1 列表推導(dǎo)式1.

一般列表推導(dǎo)式列表推導(dǎo)式是符合Python

語法規(guī)則的復(fù)合表達式,它能以快捷的方式根據(jù)已有的可迭代對象構(gòu)建滿足特定需求的列表。由于列表使用[

]創(chuàng)建,列表推導(dǎo)式用于生成列表,因此列表推導(dǎo)式被放在[

]中。一般列表推導(dǎo)式的語法格式如下。[expression

for

item

in

iterable

if

condition

]或:[expression1

if

condition

else

expression2

for

item

in

iterable]

參數(shù)說明如下。iterable:可迭代對象。item:迭代變量,可迭代對象中的數(shù)據(jù)。第

6

組合數(shù)據(jù)類型43

condition:條件表達式。expression:依據(jù)條件選擇迭代變量數(shù)據(jù),根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式。

expression1:依據(jù)條件選擇的表達式

1,根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式

1。expression2:依據(jù)條件選擇的表達式

2,根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式

2。示例代碼如程序段P6.13

所示。#

基本列表推導(dǎo)式P6.13

列表推導(dǎo)式ls1

=

[x

for

x

in

range(1,5)]print(ls1)#

帶if,選擇迭代變量ls2

=

[i*2

for

i

in

range(1,10)

if

i%2==0]print(ls2)44#

帶if,選擇表達式ls3

=

[i+1

if

i%2==0

else

i*2

for

i

in

(1,2,3,4)]print(ls3)運行代碼,輸出結(jié)果如下。[1,2,3,

4][4,8,12,

16][2,3,6,

5]以上代碼演示了基本列表推導(dǎo)式和帶if

條件語句的列表推導(dǎo)式。還可以結(jié)合if

條件語句或嵌套for

循環(huán)語句生成更靈活的列表。2.

for

循環(huán)嵌套列表推導(dǎo)式在基本列表推導(dǎo)式的for

語句之后添加一個for

語句,就實現(xiàn)了列表推導(dǎo)式的循環(huán)嵌套,嵌套for

循環(huán)語句的列表推導(dǎo)式的語法格式如下。[expression

for

item1

in

iterable1

for

item2

in

iterable2]第

6

組合數(shù)據(jù)類型45上式中,for

語句按從左至右的順序分別是外層循環(huán)和內(nèi)層循環(huán)。利用此格式可以根據(jù)兩個列表快速生成一個新的列表。示例代碼如程序段P6.14

所示。P6.14

for

循環(huán)嵌套列表推導(dǎo)式ls1=

[1,2,3]ls2=

[3,4,5]ls3

=

[x+y

for

x

in

ls1

for

y

in

ls2]print(ls3)運行代碼,輸出結(jié)果如下。[4,

5,

6,

5,

6,

7,

6,

7,

8]3.

if

語句和for

循環(huán)嵌套列表推導(dǎo)式列表推導(dǎo)式中嵌套的for

循環(huán)可以有多個,每個循環(huán)也都可以與if

語句連用,其語法格式如下。46[expressionforn1initerable1[if

condition1]

forn2initerable2[if

condition2]

...

fornniniterablen[if

conditionn]]此種格式比較復(fù)雜,應(yīng)用不多,本書中僅進行簡單介紹,有興趣的讀者可自行研究。列表的操作方法列表的添加1)

append()append()方法用于在列表末尾添加新的元素,語法格式如下。list.append(obj)第

6

組合數(shù)據(jù)類型47其中,list

表示列表,obj

表示添加到列表末尾的對象。extend()extend()方法用于在列表末尾一次性添加另一個列表中的所有元素,即使用新列表擴展原來的列表,語法格式如下。list.extend(seq)其中,list

表示列表,seq

表示添加到列表末尾的序列。insert()insert()方法用于按照索引將新元素插入列表的指定位置,語法格式如下。list.insert(index,obj)其中,list

表示列表,index

表示插入的索引位置,obj

表示插入列表中的對象。示例代碼如程序段P6.15

所示。P6.15

添加列表48ls=

[1,2,3]ls.append(5)print(ls)ls.extend([7,8])print(ls)ls.insert(3,4)print(ls)運行代碼,輸出結(jié)果如下。[1,2,3,

5][1,2,3,5,7,

8][1,

2,

3,

4,

5,

7,

8]第

6

組合數(shù)據(jù)類型492.

列表的排序sort()sort()方法用于將列表中的元素進行排序(默認為升序),語法格式如下。list.sort([key=None])[,reverse=False])其中,list

表示列表;key

為可選參數(shù),用于指定排序規(guī)則,該參數(shù)可以是列表支持的函數(shù),默認值為None,如果指定了該參數(shù),則會使用該參數(shù)的方法進行排序;reverse

也是一個可選參數(shù),表示是否降序排序,缺省時為

False,表示升序排列。使用

sort()方法對列表元素排序后,有序的元素會覆蓋原來的列表元素,不產(chǎn)生新列表。reverse()reverse()方法用于逆置列表,將列表中的元素反向存放,即把原列表中的元素從右至左依次排列存放。reverse()方法的語法格式如下。50list.reverse()示例代碼如程序段P6.16

所示。P6.16

列表排序ls=

[9,6,3,12,15]ls.sort()print(ls)ls.reverse()print(ls)運行代碼,輸出結(jié)果如下。[3,6,9,12,

15][15,12,9,6,

3]第

6

組合數(shù)據(jù)類型513.

列表的刪除remove()remove()方法用于刪除列表中的某個元素,若列表中有多個匹配的元素,則

remove()只刪除匹配到的第一個元素,語法格式如下。list.remove(obj)remove()方法只能刪除列表中某個值的第一個匹配項,如果要刪除所有匹配的元素就需要搭配循環(huán)語句實現(xiàn)。pop()pop()方法用于根據(jù)索引刪除列表中的元素,并返回該元素的值,語法格式如下。list.pop([index])其中,list

表示列表;index

表示刪除列表元素的索引值,為可選參數(shù),缺52省時為-1,表示刪除列表中的最后一個元素。3)

clear()clear()方法用于清空列表,語法格式如下。list.clear()示例代碼如程序段P6.17

所示。P6.17

列表的刪除ls=

[9,6,3,12,15]ls.remove(6)print(ls)ls.pop(1)print(ls)ls.pop()第

6

組合數(shù)據(jù)類型53print(ls)ls.clear()print(ls)運行代碼,輸出結(jié)果如下。[9,3,12,

15][9,12,

15][9,

12][]

6.4 元組6.4.1 元組概述元組是不可變數(shù)據(jù)類型,元組中的元素不能被修改。元組不支持添加元素、54刪除元素和排序操作。因此,它只能使用序列數(shù)據(jù)類型通用的統(tǒng)計函數(shù)進行操作。6.4.2 元組推導(dǎo)式元組推導(dǎo)式可以利用區(qū)間、元組、列表、字典和集合等數(shù)據(jù)類型,快速生成一個滿足指定需求的元組,語法格式如下。(expression

for

item

in

iterable

if

condition

)或:(expression1

if

condition

else

expression2

for

item

in

iterable)

參數(shù)說明如下。iterable:可迭代對象。item:迭代變量,可迭代對象中的數(shù)據(jù)。第

6

組合數(shù)據(jù)類型55

condition:條件表達式。expression:依據(jù)條件選擇迭代變量數(shù)據(jù),根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式。

expression1:依據(jù)條件選擇的表達式

1,根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式

1。expression2:依據(jù)條件選擇的表達式

2,根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式

2。示例代碼如程序段P6.18

所示。P6.18

元組推導(dǎo)式生成元組tp1

=

(i*2

for

i

in

range(1,10)

if

i%2==0)print(tp1)print(tuple(tp1))tp2

=

(i+1

if

i%2==0

else

i*2

for

i

in

[1,2,3,4])56print(tp2)print(tuple(tp2))運行代碼,輸出結(jié)果如下。<generatorobject<genexpr>at

0x000001437E20EAC0>(4,8,12,

16)<generatorobject<genexpr>at

0x000001437E2315F0>(2,3,6,

5)由輸出結(jié)果可知,元組推導(dǎo)式返回的結(jié)果是一個生成器對象。

6.5 集合Python

的集合(set)本身是可變類型,但Python

要求放入集合中的元素必須是不可變類型。集合類型與列表和元組的區(qū)別在于:集合中的元素?zé)o序但必須第

6

組合數(shù)據(jù)類型57唯一。集合的常用操作方法如表

6-4

所示。表

6-4 集合的常用操作方法方法名 功能描述添加add()向集合末尾添加元素update()將可迭代的元素添加到集合中(續(xù)表)復(fù)制copy()復(fù)制一個集合方法名功能描述訪問pop()取出最上面的元素賦值給變量58運算intersection()集合交集intersection_update()集合交集并更新第一個集合union()集合并集difference()集合差集difference_update()集合差集并更新第一個集合symmetric_difference()集合余集symmetric_difference_update集合余集并更新第一個集合第

6

組合數(shù)據(jù)類型59()判斷刪除isdisjoint()判斷兩個集合是否沒有交集issubset()判斷一個集合是否為另一個集合的子集issuperset()判斷一個集合是否為另一個集合的父集remove()刪除指定元素discard()刪除指定元素clear()清空集合6.5.1 集合推導(dǎo)式集合也可以利用推導(dǎo)式創(chuàng)建,集合推導(dǎo)式的格式與列表推導(dǎo)式相似,區(qū)別在于集合推導(dǎo)式外側(cè)為花括號,語法格式如下。60{expressionforiteminiterableif

condition}或:{expression1

if

condition

else

expression2

for

item

in

iterable}

參數(shù)說明如下。iterable:可迭代對象。item:迭代變量,可迭代對象中的數(shù)據(jù)。condition:條件表達式。expression:依據(jù)條件選擇迭代變量數(shù)據(jù),根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式。expression1:依據(jù)條件選擇的表達式

1,根據(jù)迭代變量數(shù)據(jù)計算列表元素數(shù)值的表達式

1。expression2:依據(jù)條件選擇的表達式

2,根據(jù)迭代變量數(shù)據(jù)計算列表元素第

6

組合數(shù)據(jù)類型61數(shù)值的表達式

2。示例代碼如程序段P6.19

所示。P6.19

集合推導(dǎo)式st1

=

{i*2

for

i

in

range(1,10)

if

i%2==0}print(st1)st2

=

{i+1

if

i%2==0

else

i*2

for

i

in

[1,2,3,4]}print(st2)運行代碼,輸出結(jié)果如下。{8,16,4,

12}{2,3,5,

6}集合推導(dǎo)式的更多格式可通過列表推導(dǎo)式類比,此處不再贅述。626.5.2 集合的操作方法1.

集合的添加、訪問與復(fù)制add()add()方法用于向集合末尾添加元素,語法格式如下。set.add()通過add()方法可以向集合中添加數(shù)字、字符串、元組或布爾類型的值等。update()update()方法用于將可迭代的元素添加到集合中,語法格式如下。set.update(element)通過update()方法可以將列表或集合中的元素添加到set

集合中。pop()pop()方法用于取出最上面的元素賦值給變量,語法格式如下。第

6

組合數(shù)據(jù)類型63a=

set.pop()上式表示從set

中取出一個元素并賦值給a。4)

copy()copy()方法用于復(fù)制生成一個新集合,語法格式如下。set2=

set1.copy()上式表示拷貝set1

集合賦值給set2。示例代碼如程序段P6.20

所示。P6.20

集合的添加、訪問與復(fù)制st=

{1,2,3}st.add(4)print(st)st.update([5,6])64print(st)a=st.pop()print(a,st)st1=st.copy()print(st1)運行代碼,輸出結(jié)果如下。{1,2,3,

4}{1,2,3,4,5,

6}1{2,3,4,5,

6}{2,3,4,5,

6}2.

集合的運算1)

intersection()與intersection_update()第

6

組合數(shù)據(jù)類型65兩個方法都用于計算集合的交集,語法格式如下。set3

=

ersection(set2) 與 ersection_update(set2)第一個方法表示取set1

與set2

的交集賦給set3,原集合不變;第二個方法表示取set1

與set2

的交集賦給set1。union()union()方法用于計算集合并集,語法格式如下。set3=

set1.union(set2)上式表示取set1

和set2

的并集,賦給set3。difference()與difference_update()兩個方法都用于計算集合的差集,語法格式如下。set3=

set1.difference(set2)與 set1.difference_update(set2)第一個方法表示將set1

中有而set2

中沒有的元素賦給set3;第二個方法66表示從set1

中刪除與set2

相同的元素。4)symmetric_difference()與symmetric_difference_update()兩個方法都用于計算集合的對稱差,語法格式如下。set3

=

set1.symmetric_difference(set2)

set1.symmetric_difference_update(set2)第一個方法表示取set1

和set2

中互不相同的元素賦給set3;第二個方法表示取set1

和set2

中互不相同的元素賦給set1。示例代碼如程序段P6.21

所示。P6.21

集合的運算set1=

{1,2,3,4}set2=

{3,4,5,6}set3

=

ersection(set2) #

交集print(set3)第

6

組合數(shù)據(jù)類型67#

并集#對稱差集set1

和set2

互不相同的元素#

差集set1

中有而set2

中沒有#

交集賦值給set1#

對稱差集賦值給set1set4=

set1.union(set2)print(set4)set5=

set1.symmetric_difference(set2)print(set5)set6=set1.difference(set2)print(set6)set1.intersection_update(set2)print(set1)set1.symmetric_difference_update(set2)print(set1)運行代碼,輸出結(jié)果如下。{3,

4}68{1,2,3,4,5,

6}{1,2,5,

6}{1,

2}{3,

4}{5,

6}3.

集合的判斷isdisjoint()isdisjoint()方法用于判斷兩個集合是否沒有交集,語法格式如下。set1.isdisjoint(set2)上式用于判斷set1

和set2

是否沒有交集,若有交集則返回

False,否則返回

True。issubset()第

6

組合數(shù)據(jù)類型69issubset()方法用于判斷一個集合是否為另一個集合的子集,語法格式如下。set1.issubset(set2)上式用于判斷set1

是否為set2

的子集,若是則返回

True,否則返回

False。3)

issuperset()issuperset()方法用于判斷一個集合是否為另一個集合的父集,語法格式如下。set1.issuperset(set2)上式用于判斷set1

是否為set2

的父集,若是則返回

True,否則返回

False。示例代碼如程序段P6.22

所示。P6.22

集合的判斷set1=

{1,2,3,4}set2=

{3,4,5,6}70print(set1.isdisjoint(set2))print(set1.issubset(set2))print(set1.issuperset(set2))set3=

{1,2,3,4,5,6}print(set1.issubset(set3))print(set3.issuperset(set2))運行代碼,輸出結(jié)果如下。FalseFalseFalseTrueTrue第

6

組合數(shù)據(jù)類型714.

集合的刪除remove()remove()方法用于刪除指定的元素,語法格式如下。set.remove(element)上式表示刪除set

集合中的element

元素。discard()discard()方法也用于刪除指定的元素,語法格式如下。set.discard(element)上式表示刪除set

集合中的element

元素。clear()clear()方法用于清空整個集合,語法格式如下。set.clear()72上式表示清空set

集合中的所有元素。示例代碼如程序段P6.23

所示。P6.23

集合的刪除st=

{1,2,3,4,5}st.remove(4)print(st)st.discard(2)print(st)st.clear()print(st)運行代碼,輸出結(jié)果如下。{1,2,3,

5}第

6

組合數(shù)據(jù)類型73{1,3,

5}set()frozenset

集合frozenset

集合是不可變序列,程序不能改變序列中的元素。set

集合是可變序列,程序可以改變序列中的元素。set

集合中所有能改變集合本身的方法,如remove()、discard()、add()

等,frozenset

都不支持;set

集合中不改變集合本身的方法,fronzenset

都支持??梢栽诮换ナ骄幊汰h(huán)境中輸入dir(frozenset)查看frozenset

集合支持的方法,frozenset

集合的方法和set

集合中同名方法的功能是一樣的。fronzenset

集合主要在以下兩種情況下使用。當(dāng)集合的元素不需要改變時,可以使用fronzenset

替代set,這樣更加安全。74(2)

有時候程序要求必須是不可變對象,此時也要使用

fronzenset

替代set。例如,字典(dict)的鍵(key)就要求是不可變對象。示例代碼如程序段P6.24

所示。P6.24

frozenset

集合st=

{1,2,3}fst=

frozenset([5,6])st.add(fst)print(st)st1={7,8}st.add(st1)print(st)運行代碼,輸出結(jié)果如下。第

6

組合數(shù)據(jù)類型75{frozenset({5,6}),1,2,

3}Traceback(mostrecentcall

last):File"D:/x.py",line6,in

<module>st.add(st1)TypeError:unhashabletype:

'set'set

集合本身的元素必須是不可變的,因此,set

的元素不能是set,只能是frozenset。第

3

行代碼向set

中添加frozenset

是可以的,因為frozenset是不可變的;但是,第

6

行代碼中嘗試向set

中添加set,這是不允許的,因為set

是可變的,程序會報錯。

6.6 字典Python

中的字典是典型的映射類型。Python

字典是一種可變?nèi)萜髂P停?6且可存儲任意類型對象,如字符串、數(shù)字、元組等其他容器模型。字典的常用操作方法如表

6-5

所示。表

6-5 字典的常用操作方法方法名 功能描述創(chuàng)建fromkeys()創(chuàng)建一個新字典,以序列的元素做字典的鍵,value

為字典所有鍵對應(yīng)的初始值訪問get()獲取指定鍵對應(yīng)的值。當(dāng)指定的鍵不存在時,get()返回空值Nonekeys()用于返回字典中的所有鍵(key)values()用于返回字典中所有鍵對應(yīng)的值(value)items()用于返回字典中所有的鍵值對(key-value)第

6

組合數(shù)據(jù)類型77修改,setdefault()如果鍵不存在于字典中,將會添加鍵并將值設(shè)為默認值。如果存在則返回該鍵的值update()將作為參數(shù)的字典中的元素添加到另一個字典中復(fù)制copy()返回一個字典淺拷貝的副本(續(xù)表)方法名功能描述刪除pop()刪除字典中的某個鍵對應(yīng)的項popitem()刪除字典中的最后一對鍵和值clear()清

溫馨提示

  • 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

提交評論