當(dāng)不可變序列遇上元組,所有美好環(huán)環(huán)相扣!


元組(Tuple)是python中另一個(gè)重要的序列結(jié)構(gòu)。他和列表一樣也是由一系列特定順序排列的元素組成,不同之處在于它是不可變序列。


在形式上它是由一對(duì)”()“組成的,相鄰元素之間用“,”隔開。并且在同一個(gè)元組當(dāng)中,元素的數(shù)據(jù)類型可以不同,因?yàn)樗鼈冎g沒有任何關(guān)系。


說明

從元組和列表的定義來看,這兩種數(shù)據(jù)結(jié)構(gòu)比較類似。它們之間的區(qū)別主要在于元組是不可變序列,列表是可變序列。也就是說元組中的元素不可修改,而列表中的元素可以單獨(dú)拿出來修改。


元組的創(chuàng)建


1.使用賦值運(yùn)算符直接創(chuàng)建元組語法格式如下:
tuplename = (element1,element2,element3,......elementN)

tuplename?表示元組的名字

element?表示元組中的元素,沒有個(gè)數(shù)限制。數(shù)據(jù)類型只要是python支持的數(shù)據(jù)類型都是允許的。


注意

創(chuàng)建元組和列表的語法類似,區(qū)別在于元組使用的是(),而列表創(chuàng)建使用的是[]。

tuplename = (1,'python',[123,'helloworld!','中國萬歲'],('床前明月光',))print(tuplename)# (1, 'python', [123, 'helloworld!', '中國萬歲'], ('床前明月光',))

2.創(chuàng)建空元組
emptytuple = ()

空元組可以應(yīng)用在為函數(shù)傳遞一個(gè)空值或者是返回空值時(shí)。例如函數(shù)必須傳遞一個(gè)元組類型的值,但是此時(shí)我們還不想給它傳值時(shí),就可以創(chuàng)建一個(gè)如上圖所示的空元組。


3.創(chuàng)建數(shù)值元組

在python中我們可以使用tuple()函數(shù)直接將range()函數(shù)循環(huán)出來的值轉(zhuǎn)化為數(shù)值元組。

tupel()函數(shù)的語法格式如下:
tuple(data)

其中data表示可以轉(zhuǎn)化為元組類型的數(shù)據(jù),其類型可以是range對(duì)象、字符串、元組或者其他可迭代對(duì)象。

例如創(chuàng)建一個(gè)80-100之間的所有偶數(shù)的元組

tuple(range(80,100,2))#(80, 82, 84, 86, 88, 90, 92, 94, 96, 98)

元組的刪除

元組刪除語法格式如下

del tuplename

tuplename 表示要?jiǎng)h除的元組的名字

說明

del語句在實(shí)際開發(fā)中并不常見,因?yàn)閜ython自帶的垃圾回收機(jī)制會(huì)自動(dòng)銷毀不用的元組,所以即使我們不手動(dòng)刪除,系統(tǒng)也會(huì)自動(dòng)清理的。

例如定義一個(gè)畢業(yè)班,考考結(jié)束之后他們都進(jìn)入了自己心儀的大學(xué),所以我們應(yīng)該用del將其從高中刪除。

seniorschool = ('關(guān)羽','張飛','趙云','黃忠','馬超')print(seniorschool)#('關(guān)羽', '張飛', '趙云', '黃忠', '馬超')

使用del 刪除元組之后再去打印的話就會(huì)報(bào)not found的error。

seniorschool = ('關(guān)羽','張飛','趙云','黃忠','馬超')del seniorschoolprint(seniorschool)# NameError: name 'seniorschool' is not defined

訪問元組元素

同列表的訪問方式一樣,使用print()函數(shù)口即可訪問元組內(nèi)的元素,例如定義一個(gè)元組并且訪問元組內(nèi)的所有元素

threekingdoms = (3, '三國', ['關(guān)羽','張飛','劉備'], ('魏','蜀','吳'))print(threekingdoms)#(3, '三國', ['關(guān)羽', '張飛', '劉備'], ('魏', '蜀', '吳'))
還可以通過元組的索引訪問指定的元素
threekingdoms = (3, '三國', ['關(guān)羽','張飛','劉備'], ('魏','蜀','吳'))print(threekingdoms[3])#('魏', '蜀', '吳')

同列表一樣也支持切片操作

threekingdoms = (3, '三國', ['關(guān)羽','張飛','劉備'], ('魏','蜀','吳'))print(threekingdoms[:-1])#(3, '三國', ['關(guān)羽', '張飛', '劉備'])

修改元組元素

元組是不可變序列,指的是不能對(duì)它內(nèi)在的元素做修改,但也不是說完全不能修改。我們可以對(duì)這個(gè)元組進(jìn)行重新賦值。

NBAplayer = ('科比','詹姆斯','喬丹','杜蘭特','庫里','奧尼爾')print('NBAplayer:' ,NBAplayer)NBAplayer = ('科比','詹姆斯','喬丹','杜蘭特','庫里','保羅喬治')print('new NBAplayer:' ,NBAplayer)# NBAplayer: ('科比', '詹姆斯', '喬丹', '杜蘭特', '庫里', '奧尼爾')# new NBAplayer: ('科比', '詹姆斯', '喬丹', '杜蘭特', '庫里', '保羅喬治')
可以看出,原先的NBAplayer的元素內(nèi)容已經(jīng)發(fā)生改變了。

還有一種方法是對(duì)元組進(jìn)行組合連接的。就是對(duì)現(xiàn)在有的元組結(jié)尾處增加一個(gè)新的元組。
player = ('梅西','C羅','內(nèi)馬爾')print(player)player = player + ('莫德里奇',)print(player)# ('梅西', 'C羅', '內(nèi)馬爾')# ('梅西', 'C羅', '內(nèi)馬爾', '莫德里奇')

注意

在進(jìn)行元組連接時(shí),一定注意連接的元素如果是一個(gè)時(shí),一定不要忘記后面的逗號(hào),不然就會(huì)出現(xiàn)數(shù)據(jù)類型不匹配而不能組合問題。

TypeError: can only concatenate tuple (not "str") to tuple

歡迎大家關(guān)注小編,帶你每天學(xué)習(xí)不一樣的python!!

好了,今天分享就到此,明天我們一起看看元組推導(dǎo)式是否也像列表推導(dǎo)式那般無所不能!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容