歡迎光臨
每天分享高質量文章

5分鐘搞定Python3元組

來源:python程式員

ID:pythonbuluo

簡介

Python3 中元組表現為如下形式:

元組(tuple)是一種靜態的(immutable)或者說是不可變(unchangeable)的資料結構,裡面的元素按照一定的順序排列。它是靜態的,所以元組裡的元素不能被修改。

元組用於給資料分組。元組中的每一個元素稱之為“項”(item)。

元組中的值被包裝在括號中,並用逗號分隔,空元組可以寫成coral=(),不過只有一項元素的元組必須使用逗號:coral = (“blue coral”,)。

如果使用print()函式列印元組,會得到如下的輸出,其中元組依然‘()’用括號包裹。

當你試圖理解Python中的元組或者其他集合型別的資料結構時,去想一下電腦中存在的不同集合是有幫助的:不同型別檔案的排列,你的歌曲清單,瀏覽器中的書簽,你的郵箱,你在流媒體上獲得的影片集合等等。

元組和串列很像,不過元組中的值是不可修改的。也正因為如此,當你在程式碼中使用元組時,就意味著告訴他人你不想集合中的資料被修改。同時,因為元組中的值不可變,因此相比於使用串列,你的程式碼能透過使用元組得到最佳化。

元組的索引

作為一個有序的元素集合,元組中的任一項都可以透過索引被單獨訪問。

每一項都與一個索引號相關聯,它是一個整數值,從0開始計數。

對於coral元組,它的索引如下所示:

元組中的第一項,字串“blue coral”的索引是0,元組的最後一個元素是“elkhorn coral”,索引號是3。

因為元組中的每一項都有一個對應的索引號,因此我們可以單獨地訪問每一個元素。

現在我們透過索引號單獨訪問某個元素:

如上表所示,索引號的範圍是0~3,所以我們可以透過索引號去訪問其中的每個元素:

如果我們訪問此元組時使用一個超過3的索引號,它會提示說索引號越界。

索引號除了可以是正數,還可以是負數形式,它是從後往前倒著數地,從-1開始。

當我們去具體訪問一個長元組的最後幾項時,負數形式的索引號很有效。

還是針對coral元組,它的負數形式的索引號如下:

所以如果你想透過負數形式的索引打印出“blue coral”這一項,可以寫成如下形式:

我們還可以透過‘+’運運算元來將元組中的字串值和另一個字串連線:

我們把索引號為1的元素的值和字串“This reef is made up of”組合在一起。我們也可以使用‘+’來連線兩個或者多個元組。

元組中的每一項都有對應的索引號,我們可以很容易地去訪問元組中的每一個元素。

元組的切片

我們使用索引號去訪問元組中的某一項。切片(slice)透過構造一個索引號的範圍[x:y]可以同時獲得元組中的多個值。

假設我們想獲取coral元組中間的值,可以用如下方式構造一個切片。

當我們在構造[1:3]這個切片時,第一個表示切片開始的地方(包含此索引號),第二個數表示切片結束的地方(不包括此索引號),因此[1:3]能夠取出索引號為1和2的元素。

如果你想得到除了端點元素的剩餘所有元素,你可以在[x:y]中忽略某一項。

如你想打印出coral元組中的前三個元素,你可以寫成如下形式:

這就打印出元組中前面部分的資訊,在索引號為3的元素之前停止。

為了打印出元組後面部分的資訊,可以忽略掉[x:y]中y的值:

我們也可以使用負數形式的索引號構造切片來訪問元組:

切片中的最後一個變數是步長(stride),它是指當我們取出前一項時,移動多少個元素去取下一個值。

前面的幾個例子,我們都忽略了這一變數,使用預設值1。因此我們能夠取得兩個索引號中間的所有元素。

完整的切片構造方式[x:y:z],z是指步長。我們來構造一個長一點的元組,透過步長為2的切片去訪問它:

我們構造的切片[1:11:2]打印出從索引號為1(包括此索引號),到索引號為11(不包括此索引號)的值,步長為2告訴我們隔一項列印一個。

我們可以忽略切片中的前兩項,只使用步長變數:

透過把切片中的步長設定為3,每個索引號能夠被3整除的元素打印出來:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

透過使用正數或者負數形式的切片,並設定步長,我們可以更加有針對性地獲取元組中的值。

元組的連線和複製

運運算元可以被用來連線或者複製元組。連線是透過‘+’來完成,複製是‘*’來完成。

‘+’可以將兩個或者多個元組連線在一起。我們可以把兩個元組中的值合併得到一個新的元組。

輸出結果為:

因為‘+’運運算元可以用來連線,所以可以被用來將多個元組合併成一個新的元組,儘管如此,我們還是不能改變某一個已存在的元組。

‘*’運運算元可以用來複制元組,也許你需要將某一目錄下的檔案全部複製到伺服器上,或者你想和朋友分享一下播放串列,在這些情況下,你需要複製資料的集合。

讓我們把coral元組乘以2,kelp元組乘以3,來建立新的元組。

透過‘*’運運算元,我們可以將元組複製指定的次數,透過原有的資料序列去製造新的元組。

現有的元組可以透過‘+’或者‘*’來進行連線或者複製操作。

元組的函式

你可以使用一些內建函式來操作元組。

len()

類似於字串和串列,我們可以透過len()函式計算元組的長度,把元組作為引數傳遞進去:

當你想得到不同集合長度的最大或最小值時,這個函式非常有用。

當對kelp元組和numbers使用len函式時,我們會得到如下輸出:

我們得到上述輸出是因為kelp有四個元素,numbers有13個元素:

上述實體中元組的長度比較小,當元組較長時len()可以得到元素的具體數量。

max()和min()

當我們處理數值型的元組時(包括整數和浮點數),我們可以使用max()和min()函式去找到某一特定元組中的最大值和最小值。

這兩個函式讓我們能夠得到定量資料的相關資訊,如考試成績,溫度,價格等。

看一下由浮點陣列成的元組:

為了使用max()函式,需要把元組傳遞進函式,max(more_numbers)。

max()函式能夠得到元組中的最大值。

同樣地,我們也可以使用min()函式得到最小值。

如此我們就能找到並打印出元組中的最小值。

和len()函式一樣,當元組中的資料項較多時,max()和min()是很有用的。

元組和串列的不同之處

元組和串列的首要不同之處就是元組中的值不可修改的。這意味著不能在元組中新增或者刪除值,某一資料項的值也不能修改。

不過,我們可以透過‘+’等運運算元來構造新元組。

讓我們再一次操作coral元組,我們想要把資料項‘blue coral’替換成‘black coral’。如果你試影象操作串列那樣去操作元組:

它會報錯。

這是因為元組的值是不能修改的。

如果構造完一個元組,而後你才發現真正需要的是串列形式,我們可以將其進行轉換。

為了把元組轉換成串列,我們可以使用list()函式。

現在我們就把元組轉換成用[]包裹的串列了。

同樣地,你可以使用tuple()函式將串列轉換為元組。

你可以在“在Python3如何轉換資料”學到更多相關知識。

總結

元組是一種有序的資料型別,它不能被修改,因其執行速度比串列快,所以使用元組的程式碼會有一定的最佳化。當你和其他人共同合作編寫程式碼時,使用元組型別意味著你不想自己的資料序列被修改。

這篇導論闡述了元組的基本特性,包括索引,切片和拼接,同時也介紹了針對元組的內建函式。

英文原文:https://www.digitalocean.com/community/tutorials/understanding-tuples-in-python-3 
譯者:崔子橙

《Linux雲端計算及運維架構師高薪實戰班》2018年11月26日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~

    *宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。

    – END –


    贊(0)

    分享創造快樂