logo

Thursday 24th of May 2012

廣告

廣告贊助商

元組(Tuple) PDF 列印 E-mail
作者是 Victor   
週三, 11 二月 2009 21:09

什麼是元組(Tuple)

簡單的來說,就是不可改變的序列,也就是元素的組合,和串列很像,只差在它不可改變和語法,你可能會覺得很疑惑,都已經有了串列為何還需要元組,答案就是因為有時我們希望一個序列創造出來不能被改變,一個最好的例子就是字典的鍵值,還記得我們提過,字典的鍵必須滿足"不可改變"的條件,因此用串列就無法當做鍵,而用元組就可以,以下讓我們來介紹元組。

(物件1, 物件2, 物件3, ....)

語法和串列幾乎一樣,只是[]改成用(),還有一點需要注意的是,當元素的元素只有一個,像這樣

(元素)

這樣寫並不會被當成Tuple,為什麼? 因為這樣和運算優先的括號是一樣的,Python並沒有辦法分別它們之間的差別,因此當元組的元素只有一個時,必須這樣寫

(元素, )

多一個多餘的逗號,讓Python的直譯器就能知道這是一個元組而不是指運算優先的括號。

序列的操作

像之前說過的,由於元組是"不可改變"的物件,因此元組的操作只有讀取之類的操作,而其它操作像 a + b 這類的操作,其實都是創立一個新的元組出來,而沒有造成任何改變,字串也是這樣的物件。

而我們現在要介紹的操作方式,是針對序列(Sequence)的操作,也就是說,只要是"序列",這些操作基本上都適用,而目前學過的序列有哪些呢? 第一個是字串,接著是串列,再來就是元組,換言之,以下介紹的操作,都可以應用在這三種,或是其它實作序列方法的物件上面。

我們之前就有在字串的"字串運算"中介紹了大致上的操作方式,其實那些運算是因為字串也是序列,所以也一樣可以使用,以下我們完整地介紹序列的操作方式。

Col 01 Col 11
x in  s 如果x出現在序列s中為真
x not in s 如果x不出現在序列s中為真
s + t 兩個序列s和t連接在一起成為一個新的序列
n*s 或 s*n 序列s的內容重覆n次
s[i] 取得第i個元素
s[i:j] 取得從i開始,到j前一個元素的切片
s[i:j:k] 取得i到j的切片,且每k個元素取一個
len(s) len函數回傳s序列的元素個數
min(s) 回傳序列中最小的元素
max(s) 回傳序列中最大的元素

雖然字串和List都也一樣可以使用以上的操作方式,但是這次是在說明Tuple,因此只以Tuple做示範,以下是程式範例。

# 建立一個Tuple
tupleA = (1, 2, 3)

# 建立另一個Tuple
tupleB = (7, 7, 8, 8)

# 印出兩個Tuple連接後的結果
print tupleA + tupleB

# 印出tupleA重覆3次的結果
print tupleA * 3

# 印出3是否在tupleA裡
print 3 in tupleA

# 印出tupleB的元素個數
print len(tupleB)

# 印出從1開始的切片
print tupleA[1:]

# 印出tupleB中最大的元素
print max(tupleB)

# 建立一個Dictionary
tupleMap = {}

# 如同我們前面說的
# 因為Tuple是"不可改變"的物件
# 因此可以當成Dictionary的鍵值
tupleMap[tupleA] = 'hello'

# 印出(1, 2, 3)的對應值
print tupleMap[(1, 2, 3)]

最近更新在 週三, 11 二月 2009 21:47
 

核心是 Joomla!. Designed by: Free Joomla Theme, whois protect. Valid XHTML and CSS.