所以這篇文章,我們先來(lái)回顧和總結(jié)Python數(shù)據(jù)結(jié)構(gòu)里常用操作。Python中常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)可以統(tǒng)稱(chēng)為容器(container)。序列(如列表和元組)、映射(如字典)以及集合(set)是三類(lèi)主要的容器。而扁平序列如str、bytes、bytearray、memoryview 和 array.array等不在這篇文章的討論范圍內(nèi)。
創(chuàng)新互聯(lián)公司主營(yíng)沈河網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),沈河h5小程序制作搭建,沈河網(wǎng)站營(yíng)銷(xiāo)推廣歡迎沈河等地區(qū)企業(yè)咨詢(xún)
在此,我們先從元組開(kāi)始說(shuō)起。
元組區(qū)別于列表的顯著特征之一就是它不能被修改,但其另外一個(gè)作用就是 用于沒(méi)有字段名的記錄 [1] 。因?yàn)楹笳呓?jīng)常被忽略,我們先來(lái)看看元組作為記錄的作用。
使用括號(hào)就可以定義一個(gè)元組。元組中的每個(gè)元素都存放了記錄中一個(gè)字段的數(shù)據(jù),外加這個(gè)字段的位置。正是這個(gè)位置信息給數(shù)據(jù)賦予了意義。下面的例子中,元組就被當(dāng)作記錄加以利用:
輸出為:
上述for循環(huán)中的操作提取了元組中的元素,也叫作拆包(unpacking)。平行賦值是對(duì)元組拆包很好的應(yīng)用,示例如下:
還有一個(gè)經(jīng)典而優(yōu)雅的應(yīng)用是交換變量的值:
用 * 運(yùn)算符把一個(gè)可迭代對(duì)象拆開(kāi)作為函數(shù)的參數(shù),例如Python的內(nèi)置函數(shù)pmod接收兩個(gè)數(shù)字類(lèi)型的參數(shù),返回商和余數(shù)。以下范例將使用 * 將元組傳入函數(shù)。
輸出為:
有些函數(shù)有多個(gè)返回值,將其賦給一個(gè)變量時(shí),變量類(lèi)型即是元組:
輸出為:
zip是Python的內(nèi)置函數(shù),能夠接收兩個(gè)或多個(gè)序列,并組成一個(gè)元組列表,在Python3中會(huì)返回一個(gè)迭代器,如下所示:
輸出為:
元組當(dāng)然也支持一些常規(guī)操作,如對(duì)于元組 a = (1, 'y', 5, 5, 'x') :
上述內(nèi)容不僅涵蓋了元組的基本操作,同時(shí)也結(jié)合了實(shí)際工作中常搭配使用的其他函數(shù)、運(yùn)算符等。在回顧這些知識(shí)時(shí)主要參考了兩本經(jīng)典的Python編程書(shū)籍:《流暢的Python》和《像計(jì)算機(jī)科學(xué)家一樣思考Python》,有興趣的朋友可以深入閱讀!
希望這篇文章對(duì)你有幫助,下回將總結(jié)Python列表的使用技巧。
[1]《流暢的Python》:
元組是不可變的,即元組的項(xiàng)不能被修改。元組用圓括號(hào)“()”括起來(lái),并用逗號(hào)“,”來(lái)分隔其中的項(xiàng)。
例如,下面的元組包含了三個(gè)不同數(shù)據(jù)類(lèi)型的項(xiàng):
與列表不同的是,元組一旦創(chuàng)建就不可修改,如果嘗試修改,Python解釋器會(huì)報(bào)錯(cuò):
元組是一種序列類(lèi)型,因此,上一節(jié)介紹的通用序列操作元組也都支持,此處不再贅述。下面要介紹的是元組的另外一些用法或特性。
1、 創(chuàng)建元組
在創(chuàng)建元組時(shí),可以不用加圓括號(hào)(除非它是其他數(shù)據(jù)類(lèi)型的一部分,如一個(gè)在列表中的元組,此時(shí)必須加圓括號(hào)):
可以使用元組的工廠函數(shù)tuple()創(chuàng)建元組。如果要?jiǎng)?chuàng)建一個(gè)空的元組,可以使用不包含任何項(xiàng)的圓括號(hào)或者是沒(méi)有參數(shù)的tuple()函數(shù):
tuple()函數(shù)也可以有參數(shù),且參數(shù)必須為可迭代對(duì)象:
創(chuàng)建只有一個(gè)項(xiàng)的元組時(shí)有個(gè)“小陷阱”,即用圓括號(hào)創(chuàng)建元組時(shí),如果括號(hào)中只有一個(gè)項(xiàng),而沒(méi)有逗號(hào),那么創(chuàng)建的并不是元組,而是這個(gè)項(xiàng)本身的類(lèi)型:
創(chuàng)建只有一個(gè)項(xiàng)的元組,應(yīng)該在該項(xiàng)的后面緊跟著一個(gè)逗號(hào)(或者使用tuple()函數(shù)):
2、 嵌套元組
元組與列表一樣,可以嵌套,同樣元組中也可以包含列表:
關(guān)于Python的基礎(chǔ)問(wèn)題可以看下這個(gè)網(wǎng)頁(yè)的視頻教程,網(wǎng)頁(yè)鏈接,希望我的回答能幫到你。
除了元組是不可變的之外,還應(yīng)有語(yǔ)義上的區(qū)別來(lái)指導(dǎo)它們的用法。元組是異構(gòu)數(shù)據(jù)結(jié)構(gòu)(即它們的條目具有不同的含義),而列表是同類(lèi)序列。元組具有結(jié)構(gòu),列表具有順序。
使用這種區(qū)別可以使代碼更加明確和易于理解。
一個(gè)示例是成對(duì)的頁(yè)和行號(hào),以成對(duì)參考書(shū)中的位置,如:
my_location = (42, 11) # page number, line number
然后,可以將其用作字典中的鍵來(lái)存儲(chǔ)有關(guān)位置的注釋。另一方面,列表可用于存儲(chǔ)多個(gè)位置。自然地,人們可能想在列表中添加或刪除位置,因此使列表可變是有意義的。另一方面,從現(xiàn)有位置添加或刪除項(xiàng)目沒(méi)有意義-因此,元組是不可變的。
在某些情況下,可能想更改現(xiàn)有位置元組中的項(xiàng)目,例如在頁(yè)面的各行中進(jìn)行迭代時(shí)。但是元組不變性迫使您為每個(gè)新值創(chuàng)建一個(gè)新的位置元組。從表面上看,這似乎很不方便,但是使用這樣的不可變數(shù)據(jù)是值類(lèi)型和函數(shù)式編程技術(shù)的基石,它可以具有很多優(yōu)點(diǎn)。
官方Python文檔也提到了這一點(diǎn)
“組是不可變的,并且通常包含一個(gè)異類(lèi)序列…”。
在像Haskell這樣的靜態(tài)類(lèi)型語(yǔ)言中,元組中的值通常具有不同的類(lèi)型,并且元組的長(zhǎng)度必須固定。在列表中,所有值都具有相同的類(lèi)型,并且長(zhǎng)度不是固定的。因此區(qū)別非常明顯。