【譯】全面深刻介紹Python中的元組

做者:Michael Galarnykbash

翻譯:老齊微信

譯者注: 本文適合初學者閱讀。推薦與本文內容有關的數據:《Python大學實用教程》、《跟老齊學Python:輕鬆入門》(均爲電子工業出版社出版)函數

元組是序列,就像列表同樣。元組和列表的主要區別在於元組中的不能更改(即元組不可變),而列表能夠更改(可變)。性能

建立元組

建立空元組有兩種方法,能夠經過使用不包含任何值的()來建立一個空元組。ui

# 方法1
emptyTuple = ()
複製代碼

還可使用tuple函數建立一個空元組。spa

# 方法2
emptyTuple = tuple()
複製代碼

帶有元素的元組能夠經過用逗號分隔的序列來建立。翻譯

# 方法1
z = (3, 7, 4, 2)

# 方法2 (也能夠不用圓括號建立元組)
z = 3, 7, 4, 2
複製代碼

請務必記住,若是要建立只包含一個值的元組,則須要在元素的後面使用逗號。3d

# 只有一個值的元組
tup1 = ('Michael',)

# 只有一個值的元組
tup2 = 'Michael', 

# 這是字符串,不是元組
notTuple = ('Michael')
複製代碼

訪問元組中的值

元組中的每一個值都有一個指定的索引值。須要注意的是,Python是一種基於零索引的語言,這意味着元組中的第一個值的索引是0。code

# 建立一個元組
z = (3, 7, 4, 2)

# 根據索引0獲得第一個元素
print(z[0])
複製代碼

Python還支持負索引。負索引從元組的末尾開始,有時使用負索引來獲取元組中的最後一項會更方便,由於你沒必要知道元組的長度就能夠訪問最後一項。orm

# 打印元組的最後一項
print(z[-1])
複製代碼

提示一下,你還可使用正索引訪問相同的項(以下所示)。

元組切片

切片操做返回包含請求項的新元組,從而獲得元組中元素的子集。對於下面的示例代碼,它將返回一個元組,其中包含從索引0到索引2(不包括索引2)的項。

# 建立元組
z = (3, 7, 4, 2)

# 切片包含冒號前面的第一索引,不包含冒號後面的索引
print(z[0:2])
複製代碼

# 從第一個開始,但不包含索引3項
print(z[:3])
複製代碼

你甚至能夠製做索引爲負的切片。

print(z[-4:-1])
複製代碼

元組是不可變的

元組是不可變的,這意味着在建立元組以後,沒法更新元組中的某個元素。正以下面的代碼所示,你不能更新或更改元組項的值(這不一樣於Python列表,由於Python列表是可變的)。

z = (3, 7, 4, 2)
z[1] = "fish"
複製代碼

即便元組是不可變的,也能夠採用現有元組的一部分來建立新元組,以下面的示例所示。

# 建立元組
tup1 = ('Python', 'SQL')

# 建立另一個元組
tup2 = ('R',)

# 在已有元組基礎上建立一個新元組
new_tuple = tup1 + tup2;
print(new_tuple)
複製代碼

元組的方法

在開始本節以前,先建立一個元組。

# 建立元組
animals = ('lama', 'sheep', 'lama', 48)
複製代碼

index方法

index方法返回在元組中查詢到的第一個值的索引。

print(animals.index('lama'))
複製代碼

count方法

count方法返回一個值在元組中出現的次數。

print(animals.count('lama'))
複製代碼

遍歷元組

可使用for循環遍歷元組的項。

for item in ('lama', 'sheep', 'lama', 48):
   print(item)
複製代碼

元組解包

元組對於序列解包頗有用。

x, y = (7, 10);
print("Value of x is {}, the value of y is {}.".format(x, y))
複製代碼

枚舉

枚舉函數返回一個元組,該元組包含每次迭代的計數(從開始時默認爲0)和在序列上迭代得到的值:

friends = ('Steve', 'Rachel', 'Michael', 'Monica')
for index, friend in enumerate(friends):
    print(index,friend)
複製代碼

元組相對於列表的優勢

下面的視頻內容很詳細地介紹了元組和列表的區別,請觀看:

(視頻課程)

列表和元組是按序列存儲值的內置Python數據類型。元組是不可變的,而列表是可變的。與列表相比,元組還有其餘一些優勢(部分來自堆棧溢出)

  • 元組比列表快。若是要定義一個恆定的數值集合,而且你所要作的只是遍歷它,請使用元組而不是列表。使用timeit能夠測量性能差別,該模塊容許你對Python代碼計時。下面的代碼爲每種方法執行100萬次,並輸出以秒爲單位的總時間。
import timeit 
print(timeit.timeit('x=(1,2,3,4,5,6,7,8,9,10,11,12)', number=1000000))

print(timeit.timeit('x=[1,2,3,4,5,6,7,8,9,10,11,12]', number=1000000))
複製代碼

  • 元組能夠用做字典鍵(特別是包含不可變值的元組,如字符串、數字和其餘元組)。列表永遠不能用做字典鍵,由於列表是可變的。

  • 元組能夠用做集合中的值,而列表不能。

關注微信公衆號:老齊教室。讀深度文章,得精湛技藝,享絢麗人生。

相關文章
相關標籤/搜索