前陣子中秋剛過,不知道大家最喜歡哪家品牌的月餅?我個人很喜歡佳德鳳凰酥(純分享無業配!)然而在我小的時候,中秋送雪餅是一種很新潮的行為,跟一般的月餅不同,雪餅主打的是冰冰涼涼,有點像是冰淇淋餅乾,滿足吃月餅與吃冰淇淋的雙重口感享受。
那為什麼會講到元祖雪餅呢?因為知道元祖雪餅的,你不小心暴露真實年齡了!
今天的重點是不是雪餅的「元組 Tuples」,相較於有順序性、可變的串列,元組是另一種可以儲放多種資料型態的物件,然而不同的是,元組是有順序性,卻不可變的,也就是說,一旦元組被創造後,我們無法再去增加、修改、刪減這個元組裡面存放的資料,所以比起串列,元組身上可使用的方法也少了許多。
我們可以透過 ()
小括號或是類別 tuple()
創建一個新的 tuple。
使用 tuple()
創建一個新的元組
tuple_one = tuple() # 創造出一個空元組
然而要注意的是,如果要在 tuple()
內放入引數,引數必須是一個可迭代的物件(如字串、串列等)。
使用小括號 ()
創建元組
tuple_two = ("item1", "item2", "item3")
既然元組和串列內的資料都有排序,自然也可以透過索引值取得裡面指定項目的元素。
fruits = ('banana', 'orange', 'mango', 'lemon')
# 0 1 2 3
first_fruit = fruits[0] # banana
second_fruit = fruits[1] # orange
也可以透過反向的索引值來取得指定元素
fruits = ('banana', 'orange', 'mango', 'lemon')
# -4 -3 -2 -1
first_fruit = fruits[-4] # banana
second_fruit = fruits[-3] # orange
我們可以透過切片將一個元組的指定部分或是全部切割並複製出來,這樣會產生出一個新的元組。
fruits = ('banana', 'orange', 'mango', 'lemon')
all_fruits = fruits[0:4] # all_fruits 會擁有 fruits 裡面完整的元素
orange_mango = fruits[1:3] # 只會有 orange 跟 mango
orange_to_the_rest = fruits[1:] # 除了 banana,其他都包含
雖然說 tuple
元組根據最一開始的說明是一個具有順序性且不可變更的資料型態,然而同一時間我們也知道 list
串列是具有順序性且可變更的資料型態,所以如果我們想對 tuple 進行如 list 的操作,最簡單暴力的方法就是使用 list()
類別,將 tuple 直接轉換為 list。
fruits = ('banana', 'orange', 'mango', 'lemon')
fruits = list(fruits) # 此時變數 fruits 被重新賦值,且該值會是一個串列
print(fruits) # ['banana', 'orange', 'mango', 'lemon']
fruits[0] = 'apple'
print(fruits) # ['apple', 'orange', 'mango', 'lemon']
fruits = tuple(fruits) # 再次將 fruits 轉換為 tuple
print(fruits) # ('apple', 'orange', 'mango', 'lemon')
廢話不多說,我們一樣也可以使用運算子 in
來檢查,並透過回傳的布林值確認該元素是否存在。
fruits = ('banana', 'orange', 'mango', 'lemon')
print('orange' in fruits) # True
print('apple' in fruits) # False
fruits[0] = 'apple' # TypeError: 'tuple' object does not support item assignment,因為我們不能更改 tuple 裡面的既有元素。
要特別注意的是,因為 tuple 不可變的特性,我們連 tuple 裡面本來存有的元素都不能刪除,因為刪除也是「變更行為」的一種,然而我們倒是可以刪除整個 tuple,讓指定的 tuple 整個也不剩。
fruits = ('banana', 'orange', 'mango', 'lemon')
del fruits
print(fruits) # NameError: name 'fruits' is not defined,因為 fruits 已經從記憶體中被刪除了。
其實我個人覺得翻譯成元組並不是一個最精準的說法,如果查詢維基百科,會發現元組更完整的名稱會稱作「多元組」、「順序組」,而這兩個名字能夠更好的表達出 tuple 的特性——可以存放多個資料,並且具有順序。
元組這個名稱的完整名稱應該是「多個有限個元素所組成的序列」,tuple 被誰翻譯做「元組」的歷史事實已經不可考,但透過這個完整名稱,可以更清楚知道 tuple 名字所代表的意涵,而不是死記一個像是月餅品牌的專有名詞。
在查詢元祖雪餅時,一直很好奇平常大家會買雪餅嗎?又有誰會買?為什麼這幾年台灣都看不到元祖雪餅的廣告了,無意間看到了這篇文章——專訪大陸糕餅界皇后:元祖食品董事長張秀琬,沒想到元祖雪餅不知不覺也將營業重心挪往中國大陸,而創辨人張秀琬對於雪餅這個特別的產品也有一番自己的定位邏輯,蠻有趣也蠻值得當作一篇冷知識文章來看看!