哈嘍大家好,我是咸魚5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
好久不見甚是想念,2023 年最后一次法定節假日已經結束了,不知道各位小伙伴是不是跟咸魚一樣今天就開始“搬磚”了呢?5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
我們知道元組(tuple)是 Python 的內置數據類型,tuple 是一個不可變的值序列5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
tuple 的元素可以是任何類型,一般用在存儲異構數據(例如數據庫記錄)的場景5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
那么今天這篇譯文將帶大家深入了解一下 tuple 以及它們的主要功能和示例(原文較長,我分成幾個部分去講)5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
原文鏈接:https://realpython.com/python-tuple/5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
前言
5AD28資訊網——每日最新資訊28at.com
tuple 是不可變的,可以存儲固定數量的元素(也可以叫項目,item)5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
例如可以通過 tuple 來表示笛卡爾坐標(x,y)、RGB 顏色(red,green,blue)或者數據庫表中的記錄(name,age,job)5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
tuple 的一些特點如下:5AD28資訊網——每日最新資訊28at.com
有序:里面的元素可以按照順序排列5AD28資訊網——每日最新資訊28at.com
輕量級:與列表等其他序列相比,tuple 消耗的內存要少5AD28資訊網——每日最新資訊28at.com
從零開始索引:可以從零開始索引訪問里面的元素5AD28資訊網——每日最新資訊28at.com
不可變:不可以改變里面的元素5AD28資訊網——每日最新資訊28at.com
異構:可以存儲不同數據類型的對象(包括可變對象)5AD28資訊網——每日最新資訊28at.com
可嵌套:tuple 里面可以包含 tuple5AD28資訊網——每日最新資訊28at.com
可迭代:能夠遍歷里面的元素5AD28資訊網——每日最新資訊28at.com
可切片:可以從元組中提取一系列元素5AD28資訊網——每日最新資訊28at.com
可組合:支持串聯操作,可以使用串聯運算符組合多個元組5AD28資訊網——每日最新資訊28at.com
可哈希:里面的元素都是不可變時可以用作字典的鍵5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
在 python 中,tuple 是有序的,這意味著其元素保持原始插入順序,這個順序在 tuple 的生命周期內保持不變5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
可以按位置或索引訪問元組中的元素(從零開始)5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
tuple 創建
5AD28資訊網——每日最新資訊28at.com
tuple 是以逗號分隔的序列對象。要在元組中存儲對象,需要一次創建包含其所有內容的元組對象5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
直接創建
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
需要注意的是,括號不是必需的,逗號才是。但是在大多數情況下括號可以提高代碼的可讀性5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
盡管括號對于定義大多數 tuple 不是必需的,但在創建空 tuple 時必須包含它們:5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
因為 tuple 是不可變的,所以創建空 tuple 之后無法往里面添加元素。到這里有小伙伴可能會問:既然這樣為什么還要創建一個空 tuple?5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
例如現在有一個構建并返回 tuple 的函數,在一些情況下這個函數不會為生成的 tuple 創建元素,這樣我們就需要返回一個空 tuple。以此來使得函數的返回值類型保持一致5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
除此之外,下面的情況也需要使用到括號5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
當我們使用 % 進行格式化輸出的時候:5AD28資訊網——每日最新資訊28at.com
- 第一種加括號:使用括在括號中的元組作為 % 運算符的右側操作數,按預期工作
- 第二種沒加括號:報錯
5AD28資訊網——每日最新資訊28at.com
我們創建單個元素的 tuple5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
可以看到括號不是必需的,尾隨逗號才是5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
使用 tuple() 創建
還可以使用 tuple() 從可迭代對象(列表、集合、字典或字符串)中創建 tuple,默認生成一個空 tuple5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
通過集合來創建 tuple 時需要注意集合是無序的,會影響生成 tuple 中的元素的最終順序5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
如果我們從一個迭代器對象中創建一個tuple,那么 tuple() 函數會使用迭代器逐個生成元素,然后將這些元素組合成一個元組并返回5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
又或者從生成器表達式中創建 tuple,生成器是一種特殊的迭代器5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
tuple 索引和切片
5AD28資訊網——每日最新資訊28at.com
tuple 中每一個元素都有一個整數索引,用于指定其在元組中的位置,索引從 0 開始5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
用不同的索引為 tuple 建立索引,可以直接訪問相關的值。如果使用大 O 符號表示時間復雜度,那么可以說索引是一個O(1)操作5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
這意味著 tuple 非常適合需要快速訪問序列中的特定項的情況5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
len() 函數返回 tuple 長度
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
如果使用大于或等于 tuple 長度的索引,則會報錯5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
還可以使用負索引,負索引從右端開始數起5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
負索引對于所有 Python 序列(例如列表和字符串)都是通用的5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
如果使用負索引,則 -len(tuple_object) 將成為元組中的第一項。如果使用低于此值的索引,則會報錯5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
對于嵌套 tuple,我們該如何訪問到里面的元素?5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
答案是通過多層索引5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
tuple 切片
和其他序列一樣,tuple 可以使用切片操作來提取其中的內容5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
[start:stop:step] 此構造的一部分稱為切片運算符。它由一對方括號和三個可選索引組成:start 、 stop 和 step5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
其中第二個冒號不是必須的,如果 step為1的話就可以省略5AD28資訊網——每日最新資訊28at.com
Index5AD28資訊網——每日最新資訊28at.com | Description5AD28資訊網——每日最新資訊28at.com | Default Value5AD28資訊網——每日最新資訊28at.com |
start 5AD28資訊網——每日最新資訊28at.com
| 指定要開始切片的索引(開區間)5AD28資訊網——每日最新資訊28at.com | 5AD28資訊網——每日最新資訊28at.com
0 5AD28資訊網——每日最新資訊28at.com
|
stop 5AD28資訊網——每日最新資訊28at.com
| 指定希望切片停止提取元素的索引(閉區間)5AD28資訊網——每日最新資訊28at.com | len(tuple_object) 5AD28資訊網——每日最新資訊28at.com
|
step 5AD28資訊網——每日最新資訊28at.com
| 提供一個整數值,表示切片在每個步驟中將跳過多少項5AD28資訊網——每日最新資訊28at.com | 1 5AD28資訊網——每日最新資訊28at.com
|
5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
tuple 不可變特性
5AD28資訊網——每日最新資訊28at.com
Python 的 tuple 是不可變的,這意味著一旦你創建了一個 tuple,你就不能就地更改或更新它的元素,只能創建新的 tuple 對象5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
tuple 不可變的另一個含義是無法對其擴容縮容,與列表不同,元組沒有.append() 、 .extend() .insert() .remove() 和 .clear() 方法5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
也不支持 del 語句5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
盡管 tuple 是不可變的,但是我們知道 tuple 里面可以存儲任意類型的對象,包括可變對象5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
這意味著我們可以在 tuple 中存儲列表、集合、字典等其他可變對象5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
student_info 中前兩個元素是不可變的,最后一個是列表(可變),所以我們可以對其進行更改5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
又因為 tuple 是不可變的(可哈希),所以可以用作字典中的 key5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
如果用作 key 的 tuple 里面包含可變元素,則會報錯5AD28資訊網——每日最新資訊28at.com
圖片5AD28資訊網——每日最新資訊28at.com
5AD28資訊網——每日最新資訊28at.com
本文鏈接:http://www.tebozhan.com/showinfo-26-12240-0.html深挖 Python 元組 pt.1
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 三個殺手級VS Code插件
下一篇: 十個超級實用的IntelliJ IDEA插件