元組(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ù)值元組
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 tuplenametuplename 表示要?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的元素內(nèi)容已經(jīng)發(fā)生改變了。NBAplayer = ('科比','詹姆斯','喬丹','杜蘭特','庫里','奧尼爾')print('NBAplayer:' ,NBAplayer)NBAplayer = ('科比','詹姆斯','喬丹','杜蘭特','庫里','保羅喬治')print('new NBAplayer:' ,NBAplayer)# NBAplayer: ('科比', '詹姆斯', '喬丹', '杜蘭特', '庫里', '奧尼爾')# new NBAplayer: ('科比', '詹姆斯', '喬丹', '杜蘭特', '庫里', '保羅喬治')
還有一種方法是對(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)式那般無所不能!