哈嘍大家好,,我是咸魚 好久不見甚是想念,,2023年最后一次法定節(jié)假日已經(jīng)結(jié)束了,不知道各位小伙伴是不是跟咸魚一樣今天就開始“搬磚”了呢,? 我們知道元組(tuple)是Python的內(nèi)置數(shù)據(jù)類型,,tuple是一個(gè)不可變的值序列 tuple的元素可以是任何類型,一般用在存儲(chǔ)異構(gòu)數(shù)據(jù)(例如數(shù)據(jù)庫記錄)的場景 那么今天這篇文章將帶大家深入了解一下tuple以及它們的主要功能和示例(原文較長,,我分成幾個(gè)部分去講) 前言 tuple是不可變的,,可以存儲(chǔ)固定數(shù)量的元素(也可以叫項(xiàng)目,item) 例如可以通過tuple來表示笛卡爾坐標(biāo)(x,y),、RGB顏色(red,green,blue)或者數(shù)據(jù)庫表中的記錄(name,age,job) tuple的一些特點(diǎn)如下: 有序:里面的元素可以按照順序排列 輕量級:與列表等其他序列相比,,tuple消耗的內(nèi)存要少 從零開始索引:可以從零開始索引訪問里面的元素 不可變:不可以改變里面的元素 異構(gòu):可以存儲(chǔ)不同數(shù)據(jù)類型的對象(包括可變對象) 可嵌套:tuple里面可以包含tuple 可迭代:能夠遍歷里面的元素 可切片:可以從元組中提取一系列元素 可組合:支持串聯(lián)操作,可以使用串聯(lián)運(yùn)算符組合多個(gè)元組 可哈希:里面的元素都是不可變時(shí)可以用作字典的鍵 在python中,,tuple是有序的,,這意味著其元素保持原始插入順序,這個(gè)順序在tuple的生命周期內(nèi)保持不變 可以按位置或索引訪問元組中的元素(從零開始) 創(chuàng)建tuple tuple是以逗號分隔的序列對象,。要在元組中存儲(chǔ)對象,,需要一次創(chuàng)建包含其所有內(nèi)容的元組對象 直接創(chuàng)建 #語法(item_0,item_1,...,item_n) 需要注意的是,括號不是必需的,,逗號才是,。但是在大多數(shù)情況下括號可以提高代碼的可讀性 盡管括號對于定義大多數(shù)tuple不是必需的,但在創(chuàng)建空tuple時(shí)必須包含它們: 因?yàn)閠uple是不可變的,,所以創(chuàng)建空tuple之后無法往里面添加元素,。到這里有小伙伴可能會(huì)問:既然這樣為什么還要?jiǎng)?chuàng)建一個(gè)空tuple? 例如現(xiàn)在有一個(gè)構(gòu)建并返回tuple的函數(shù),,在一些情況下這個(gè)函數(shù)不會(huì)為生成的tuple創(chuàng)建元素,,這樣我們就需要返回一個(gè)空tuple。以此來使得函數(shù)的返回值類型保持一致 除此之外,,下面的情況也需要使用到括號 當(dāng)我們使用%進(jìn)行格式化輸出的時(shí)候: 第一種加括號:使用括在括號中的元組作為%運(yùn)算符的右側(cè)操作數(shù),,按預(yù)期工作 第二種沒加括號:報(bào)錯(cuò) 我們創(chuàng)建單個(gè)元素的tuple 可以看到括號不是必需的,尾隨逗號才是 使用tuple創(chuàng)建 還可以使用tuple從可迭代對象(列表,、集合,、字典或字符串)中創(chuàng)建tuple,,默認(rèn)生成一個(gè)空tuple 通過集合來創(chuàng)建tuple時(shí)需要注意集合是無序的,會(huì)影響生成tuple中的元素的最終順序 如果我們從一個(gè)迭代器對象中創(chuàng)建一個(gè)tuple,,那么tuple函數(shù)會(huì)使用迭代器逐個(gè)生成元素,,然后將這些元素組合成一個(gè)元組并返回 my_list=[1,2,3,4,5]#可迭代對象my_iterator=iter(my_list)#轉(zhuǎn)換為迭代器對象my_iteratormy_tuple=tuple(my_iterator)print(my_tuple)#輸出結(jié)果為:(1,2,3,4,5) 又或者從生成器表達(dá)式中創(chuàng)建tuple,生成器是一種特殊的迭代器 >>>tuple(x**2forxinrange(10))(0,1,4,9,16,25,36,49,64,81) tuple索引和切片 tuple中每一個(gè)元素都有一個(gè)整數(shù)索引,,用于指定其在元組中的位置,,索引從0開始 點(diǎn)擊加載圖片 用不同的索引為tuple建立索引,可以直接訪問相關(guān)的值,。如果使用大O符號表示時(shí)間復(fù)雜度,,那么可以說索引是一個(gè)O(1)操作 這意味著tuple非常適合需要快速訪問序列中的特定項(xiàng)的情況 len函數(shù)返回tuple長度 >>>len(jane)4 如果使用大于或等于tuple長度的索引,則會(huì)報(bào)錯(cuò) >>>jane[4]Traceback(mostrecentcalllast):...IndexError:tupleindexoutofrange 還可以使用負(fù)索引,,負(fù)索引從右端開始數(shù)起 負(fù)索引對于所有Python序列(例如列表和字符串)都是通用的 點(diǎn)擊加載圖片 如果使用負(fù)索引,,則-len(tuple_object)將成為元組中的第一項(xiàng)。如果使用低于此值的索引,,則會(huì)報(bào)錯(cuò) >>>jane[-5]Traceback(mostrecentcalllast):...IndexError:tupleindexoutofrange 對于嵌套tuple,,我們該如何訪問到里面的元素? >>>employee=(...'John',...35,...'PythonDeveloper',...('Django','Flask','FastAPI','CSS','HTML'),...) 答案是通過多層索引 tuple切片 和其他序列一樣,,tuple可以使用切片操作來提取其中的內(nèi)容 #語法tuple_object[start:stop:step] [start:stop:step]此構(gòu)造的一部分稱為切片運(yùn)算符,。它由一對方括號和三個(gè)可選索引組成:start、stop和step 其中第二個(gè)冒號不是必須的,,如果step為1的話就可以省略 Index Description DefaultValue
指定要開始切片的索引(開區(qū)間)
指定希望切片停止提取元素的索引(閉區(qū)間)
提供一個(gè)整數(shù)值,,表示切片在每個(gè)步驟中將跳過多少項(xiàng)
不可變特性 Python的tuple是不可變的,這意味著一旦你創(chuàng)建了一個(gè)tuple,,你就不能就地更改或更新它的元素,,只能創(chuàng)建新的tuple對象 tuple不可變的另一個(gè)含義是無法對其擴(kuò)容縮容,與列表不同,,元組沒有.append,、.extend.insert.remove和.clear方法 也不支持del語句 盡管tuple是不可變的,但是我們知道tuple里面可以存儲(chǔ)任意類型的對象,,包括可變對象 這意味著我們可以在tuple中存儲(chǔ)列表,、集合、字典等其他可變對象 >>>student_info=('Linda',18,['Math','Physics','History']) student_info中前兩個(gè)元素是不可變的,,最后一個(gè)是列表(可變),,所以我們可以對其進(jìn)行更改 又因?yàn)閠uple是不可變的(可哈希),所以可以用作字典中的key |
|