不間斷 Python 挑戰 Day 14 - 元組 (Tuple)

閱讀時間約 8 分鐘
在程式設計中,我們會使用到一些固定不會變動的資料內容,例如一年的月份、物體的邊長、過去一周的氣溫等等,使用串列的結構固然也可以用來儲存這些資料,但串列可以被新增或刪除,不能有效保護這類不可變動的資料。因此,Python也提供了另一種形式的資料結構,稱為元組,它的資料結構和串列相同,但資料的內容不可變動。此外,由於元組的資料結構較串列簡單,它在執行上也會占用較少的資源。

元組

元組的資料結構如下:
tuple = ( data1, data2, data3, ... )
例如我們定義一個儲存台灣直轄市的元組:
cities_tuple = ("台北", "新北", "桃園", "台中", "台南", "高雄")
print(cities_tuple)
print(type(cities_tuple))
執行結果:
('台北', '新北', '桃園', '台中', '台南', '高雄')
<class 'tuple'>
若元組內只需定義一個元素,必須在元素的最後面加上「,」,否則會變成一個字串型態的資料。
# without 「,」
one_tuple = ("台北")
print(one_tuple)
print(type(one_tuple))
# with 「,」
one_tuple = ("台北",)
print(one_tuple)
print(type(one_tuple))
執行結果如下,可以看到不加「,」會被Python解讀為字串類型的資料:
台北
<class 'str'>
('台北',)
<class 'tuple'>
儘管如此,若要建立一個空的元組,只需要括號即可。
empty_tuple = ()
print(empty_tuple)
print(type(empty_tuple))
執行結果:
()
<class 'tuple'>

讀取元組元素

讀取的方式和串列相同,第一個元素的索引值為0、第二個元素的索引值為1,以此類推;若索引值是-1,代表的是元組的最後一個元素、若索引值是-2,代表的是元組的倒數第二個元素,以此類推。
print(cities_tuple[0])
print(cities_tuple[1])
print(cities_tuple[-1])
print(cities_tuple[-2])
執行結果:
台北
新北
高雄
台南
同樣若要同時取得元組中的多個元素,可用元組切片(slice)的方式:
  • tuple[a:b]  # 取得元組索引值為a到(b-1)的元素
  • tuple[:a]   # 取得元組前a個元素
  • tuple[a:]   # 取得元組索引值為a到最後一個元素
  • tuple[a:b:c]  # 以c為間隔取得元組索引值為a到(b-1)的元素
  • tuple[:]    # 取得元組所有元素
print(cities_tuple[2:5])
print(cities_tuple[:2])
print(cities_tuple[2:])
print(cities_tuple[1:5:2])
print(cities_tuple[:])
執行結果:
('桃園', '台中', '台南')
('台北', '新北')
('桃園', '台中', '台南', '高雄')
('新北', '台中')
('台北', '新北', '桃園', '台中', '台南', '高雄')

重新定義元組

元組內的元素不可被新增、刪除,但可以重新定義整個元組的資料。例如我們想要將前面儲存台灣直轄市的元組內容都各多加一個「市」,可以直接重新定義元組:
cities_tuple = ("台北", "新北", "桃園", "台中", "台南", "高雄")
print(cities_tuple)

cities_tuple = ("台北市", "新北市", "桃園市", "台中市", "台南市", "高雄市")
print(cities_tuple)
執行結果:
('台北', '新北', '桃園', '台中', '台南', '高雄')
('台北市', '新北市', '桃園市', '台中市', '台南市', '高雄市')

元組與串列互換

串列可以轉換為元組:
cities_list = ["台北", "新北", "桃園", "台中", "台南", "高雄"]
cities_tuple = tuple(cities_list)
print(cities_tuple)
執行結果:
('台北', '新北', '桃園', '台中', '台南', '高雄')
元組也可以轉換為串列:
cities_list = list(cities_tuple)
print(cities_list)
執行結果:
['台北', '新北', '桃園', '台中', '台南', '高雄']

使用for迴圈迭代

和串列相同,元組也可以使用for迴圈進行迭代:
cities_tuple = ("台北", "新北", "桃園", "台中", "台南", "高雄")
for city in cities_tuple:
  print(city, end=" ")
執行結果:
台北 新北 桃園 台中 台南 高雄

元組生成

元組和for迴圈結合,可以簡潔的方式產生元組,但和串列不同的是,若僅以小括號括住for迴圈的敘述,產生的僅是生成式(generator)物件,必須再經過tuple()轉換成元組。
scores_tuple = ()
scores_tuple = (x for x in range(10))
print(scores_tuple)
執行結果:
<generator object <genexpr> at 0x0000016CEE6199A0>
經過tuple()轉換:
scores_tuple = tuple((x for x in range(10)))
print(scores_tuple)
執行結果:
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

程式範例

為什麼會看到廣告
avatar-img
47會員
36內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Wei-Jie Weng的沙龍 的其他內容
當我們查字典時,會先找到想查詢的單字在字典裡的位置,才能在那個位置找到單字的定義;在Python中,也有一個類似的資料結構稱作字典,字典的鍵(key)就對應到我們要查詢的單字,字典的值(value)則是該單字的定義。
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
另一種迴圈的形式是while迴圈,和for迴圈常常可以達到相同的功能,差別在於for迴圈是在一定的範圍內迭代,例如從1到100,或是串列裡的每一個元素;而while迴圈是一個條件判斷的迴圈,當滿足這個條件就執行迴圈的內容,不滿足時就跳出迴圈。
目前為止,我們學到了基本的for迴圈,也就是僅對一個可迭代物件進行迭代。當一個迴圈裡面還有另一個迴圈,這時就形成了巢狀迴圈,最基本的例子就是九九乘法表,每個被乘數都對應到9個乘數,當被乘數和9個乘數都計算完了之後,才換下一個被乘數,不斷迴圈直到每個被乘數和乘數都計算過。另個for迴圈的應用是將串列和
綜合前幾天所學的內容,這裡實作了一個專題-密碼產生器。在這個專題中,我們運用了變數、串列、for迴圈、random模組等概念,讓使用者可以從數字、符號、英文字母中指定字元的數目,隨機生成一串密碼。
透過random模組生成的隨機數並非是真正完全隨機的,而是可以被重現的,因此這個特徵也被稱為是偽隨機(pseudo-random),而重現隨機數的方式便是透過設定相同的種子(seed),或是設定隨機數生成器的狀態(state)來達成。
當我們查字典時,會先找到想查詢的單字在字典裡的位置,才能在那個位置找到單字的定義;在Python中,也有一個類似的資料結構稱作字典,字典的鍵(key)就對應到我們要查詢的單字,字典的值(value)則是該單字的定義。
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
另一種迴圈的形式是while迴圈,和for迴圈常常可以達到相同的功能,差別在於for迴圈是在一定的範圍內迭代,例如從1到100,或是串列裡的每一個元素;而while迴圈是一個條件判斷的迴圈,當滿足這個條件就執行迴圈的內容,不滿足時就跳出迴圈。
目前為止,我們學到了基本的for迴圈,也就是僅對一個可迭代物件進行迭代。當一個迴圈裡面還有另一個迴圈,這時就形成了巢狀迴圈,最基本的例子就是九九乘法表,每個被乘數都對應到9個乘數,當被乘數和9個乘數都計算完了之後,才換下一個被乘數,不斷迴圈直到每個被乘數和乘數都計算過。另個for迴圈的應用是將串列和
綜合前幾天所學的內容,這裡實作了一個專題-密碼產生器。在這個專題中,我們運用了變數、串列、for迴圈、random模組等概念,讓使用者可以從數字、符號、英文字母中指定字元的數目,隨機生成一串密碼。
透過random模組生成的隨機數並非是真正完全隨機的,而是可以被重現的,因此這個特徵也被稱為是偽隨機(pseudo-random),而重現隨機數的方式便是透過設定相同的種子(seed),或是設定隨機數生成器的狀態(state)來達成。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
十年前,我跟小悟參加了台南政府所舉辦的 24 小時不間斷進食比賽,當年,我以兩分之差,沒擠進金榜。在挑戰時間內,來不及吃狀元糕跟芋頭八寶冰,以致失掉食物王的頭銜。十年後,小悟說,要不要再來回味當年勇?我知道,年輕的我胃袋能撐船,可逝去的青春,最先反映在食慾上。我笑著說不了......
Thumbnail
持著前作的風格,《蜘蛛人:穿越新宇宙》在色彩或畫面的呈現上依舊大膽、前衛,並且嘗試藉由多重宇宙的「優勢」,在成長動畫的既有敘事上,嘗試更多不同的可能性。精彩的安排讓觀看這部作品讓成為十足的享受,並賦予了觀眾再次進場支持的充分動機。
Thumbnail
節目這邊聽 📎錄製時間: 2023.10 汪汪隊立大功! MRT(Mission Readiness Test)是難度最高的國際搜救犬認證! 但是我們有兩位英雄(一人一汪)順利通過這次的認證,拿到了優良的成績! 讓我們歡迎領犬員羅浩芳!就讓她帶著小編、江小姐還有各位聽眾,一起了解這次搜救犬
Thumbnail
這一陣子不少投資標的都在上漲 連成長性沒有科技股強的食品股也在慢慢上升中 今天記錄一下自己食品股大成的最新績效 身為雞肉雙雄的其中一雄 除了飼料、雞肉、雞蛋以外,還跨足了沙拉油、豬肉、海鮮、餐廳等事業體 幾乎可說是一檔食品ETF(還不用付管理費),進去它的官網就可以看到許多不同的事業體
Thumbnail
你現在也許單一個句子可以說得溜,但持續說話覺得尷尬的原因在於:缺乏連接詞。好的連接詞會讓口語表達更精確有力,讓韓國人聽到你說的話不需要猜測意思或重新思考,表達能力也就跟著上升!
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:惡作劇之吻、慶餘年、Good Casting、溫柔時光、鋼之鍊金術師這五個戲劇作品的主題曲。
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:必娶女人、kill me heal me、錦衣之下、101次求婚、灌籃高手這五個戲劇作品的主題曲。
近期許多地方受到洪水以及颱風的侵襲 但包你發的線路及網路穩定度完全不受到影響 大家可以放心,我們是24小時全年無休不間斷 就算你半夜三點要玩包你發也完全OK 不會像有些系統只在白天開放 而同樣的穩定度也是一大考驗 在這種供電不穩定的情況 也有可能導致其他遊戲斷線 但包你發機房穩定、有備用電源 完全不
Thumbnail
疫情長時間帶來了減少開放性的社交機會,最直接的影響莫過於情緒勒索造成的封閉性失調,感謝國立台灣戲曲學院傑出校友,為身心障礙的大寶寶們帶來一系列精彩的演出,透過精心策劃的舞蹈及雜耍表演,帶給住民體驗了跟以往不同的志工服務內容,見到了久違住民
Thumbnail
每一次TDCA的關愛陪伴,都讓受贈的服務對象感受到滿滿的幸福感,一起協力完成手作皮革鑰匙圈,每一針每一線都在訓練孩子們手眼協調的肢體,透過不同花色皮革來搭配,不僅訓練孩子對色彩的辨識能力,同時也在培養眼界裡的審美觀噢!
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
十年前,我跟小悟參加了台南政府所舉辦的 24 小時不間斷進食比賽,當年,我以兩分之差,沒擠進金榜。在挑戰時間內,來不及吃狀元糕跟芋頭八寶冰,以致失掉食物王的頭銜。十年後,小悟說,要不要再來回味當年勇?我知道,年輕的我胃袋能撐船,可逝去的青春,最先反映在食慾上。我笑著說不了......
Thumbnail
持著前作的風格,《蜘蛛人:穿越新宇宙》在色彩或畫面的呈現上依舊大膽、前衛,並且嘗試藉由多重宇宙的「優勢」,在成長動畫的既有敘事上,嘗試更多不同的可能性。精彩的安排讓觀看這部作品讓成為十足的享受,並賦予了觀眾再次進場支持的充分動機。
Thumbnail
節目這邊聽 📎錄製時間: 2023.10 汪汪隊立大功! MRT(Mission Readiness Test)是難度最高的國際搜救犬認證! 但是我們有兩位英雄(一人一汪)順利通過這次的認證,拿到了優良的成績! 讓我們歡迎領犬員羅浩芳!就讓她帶著小編、江小姐還有各位聽眾,一起了解這次搜救犬
Thumbnail
這一陣子不少投資標的都在上漲 連成長性沒有科技股強的食品股也在慢慢上升中 今天記錄一下自己食品股大成的最新績效 身為雞肉雙雄的其中一雄 除了飼料、雞肉、雞蛋以外,還跨足了沙拉油、豬肉、海鮮、餐廳等事業體 幾乎可說是一檔食品ETF(還不用付管理費),進去它的官網就可以看到許多不同的事業體
Thumbnail
你現在也許單一個句子可以說得溜,但持續說話覺得尷尬的原因在於:缺乏連接詞。好的連接詞會讓口語表達更精確有力,讓韓國人聽到你說的話不需要猜測意思或重新思考,表達能力也就跟著上升!
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:惡作劇之吻、慶餘年、Good Casting、溫柔時光、鋼之鍊金術師這五個戲劇作品的主題曲。
Thumbnail
喜歡音樂的羅小咩,不定期將在周六中午12:00與你聊聊戲劇中的音樂,還有音樂中的戲劇。本次介紹:必娶女人、kill me heal me、錦衣之下、101次求婚、灌籃高手這五個戲劇作品的主題曲。
近期許多地方受到洪水以及颱風的侵襲 但包你發的線路及網路穩定度完全不受到影響 大家可以放心,我們是24小時全年無休不間斷 就算你半夜三點要玩包你發也完全OK 不會像有些系統只在白天開放 而同樣的穩定度也是一大考驗 在這種供電不穩定的情況 也有可能導致其他遊戲斷線 但包你發機房穩定、有備用電源 完全不
Thumbnail
疫情長時間帶來了減少開放性的社交機會,最直接的影響莫過於情緒勒索造成的封閉性失調,感謝國立台灣戲曲學院傑出校友,為身心障礙的大寶寶們帶來一系列精彩的演出,透過精心策劃的舞蹈及雜耍表演,帶給住民體驗了跟以往不同的志工服務內容,見到了久違住民
Thumbnail
每一次TDCA的關愛陪伴,都讓受贈的服務對象感受到滿滿的幸福感,一起協力完成手作皮革鑰匙圈,每一針每一線都在訓練孩子們手眼協調的肢體,透過不同花色皮革來搭配,不僅訓練孩子對色彩的辨識能力,同時也在培養眼界裡的審美觀噢!