iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
Python

從0開始學習Python-為未來學習AI奠定基礎系列 第 11

從0開始學習Python---元組(Tuple)、字典(Dictionary)

  • 分享至 

  • xImage
  •  

元組 (Tuple):不可變的有序資料結構

元組是一種不可變的、有序的資料結構,一旦建立後,裡面的資料就不能被修改、刪除或新增。
這種特性在需要固定、穩定資料的情況下非常有用,像是 GPS 座標、常量設定等。元組的不可變性保證了資料的完整性,避免了不小心的修改。

特點:

  1. 不可變性:元組一旦創建,內容就不能更改,所以不能對元組進行增、刪操作。
  2. 有序性:元組內部的資料是有順序的,可以通過索引來訪問每個元素。
  3. 定義方式:元組使用小括號 () 來定義,元素之間用逗號分隔,例如:(1, 2, 3)。
  4. 應用場景:適合用來儲存不可變的資料,比如固定的設定值、座標、資料庫中的唯一識別碼等。

進階功能:

  • 索引與切片:與列表類似,元組會通過索引來存取特定元素,比如用 my_tuple[0] 取第一個元素。此外元組也支援切片操作,例如 my_tuple[1:3] 代表取出元組中第 2 個到第 3 個的元素。
  • 嵌套元組:元組內可以包含其他的元組,形成嵌套結構,比如:((1, 2), (3, 4))

應用:計算多個座標點的平均值

有 4 個固定的座標點 [(2, 3), (5, 8), (12, 15), (18, 21)],計算所有點的平均 x、y 座標。

https://ithelp.ithome.com.tw/upload/images/20240911/20168994kyt2ON5ZtJ.png
https://ithelp.ithome.com.tw/upload/images/20240911/201689944omklFn8YK.png

  1. 首先,把所有座標存成一個列表,裡面每個座標用元組表示。為什麼要用元組呢?因為元組是一種不可改變的數據類型,我們不需要在這裡改變座標值,元組正好適合存放固定的數據。
  2. 接著我們需要計算 x 和 y 座標的總和,這裡設置了兩個變數 x_sum 和 y_sum,用來記錄 x 和 y 的總和。然後把每個點的 x 和 y 值分別累加起來就可以了。
  3. 再來是遍歷座標點的部分,對於每一個座標點 point,我們把它的 x 值(point[0])和 y 值(point[1])分別加到 x_sum 和 y_sum 裡。計算每個點的 x 和 y 座標的總和,是為了在最後算出平均值。
  4. 最後把 x_sum 和 y_sum 除以座標點的總數,也就是除以 len(coordinates),這樣我們就能得到平均值啦!

字典 (Dictionary):關鍵資料的快速查找

字典是一種儲存鍵值對(key-value pairs)的資料結構,它的特點是根據鍵來快速查找對應的值,像是一種特殊的"查詢表"。
而鍵必須是唯一的,所以讓字典成為查詢、更新、刪除特定資料很好用的工具。

特點:

  1. 鍵值對結構:字典中的每個元素都是一個鍵和值的對應關係,形式為 {"鍵": "值"}。鍵可以是數字、字串等不可變資料,而值可以是任何類型的資料。
  2. 可變性:字典是可變的,這代表我們可以新增、修改或刪除字典中的元素。
  3. 無序性:字典中的元素是無序的,不能通過索引訪問特定位置的元素,但可以根據鍵來快速定位。
  4. 查找效率高:字典透過哈希函數把"鍵"轉換成一個可以快速定位的數字,查找時不用一個個比對,而是直接跳到對應的哈希值位置。

進階功能:

  • 鍵的唯一性:字典中的每個鍵都是唯一的,不能有重複鍵。如果嘗試新增一個已存在的鍵,新的值會覆蓋掉原來的值。
  • 查詢與更新:可以通過 字典[鍵] 來查詢對應的值,也可以通過這種方式來更新值。
  • 字典方法:字典提供了許多有用的方法,比如 get() 用來查詢鍵,如果鍵不存在則不會報錯,還有 items()、keys() 和 values() 可以分別取得鍵值對、所有鍵和所有值。

應用:建立課程成績查詢系統

建立一個字典來儲存學生的課程成績,並提供功能來查詢特定課程的成績、更新成績,和列出所有課程。

https://ithelp.ithome.com.tw/upload/images/20240911/201689940kLzKnQoHm.png
https://ithelp.ithome.com.tw/upload/images/20240911/20168994uGKJC2Vb9u.png

  1. 首先需要用字典來儲存每個課程的成績,"課程名稱"是字典的"鍵","分數"是"值",這樣可以讓我們通過課程名稱來查找對應的成績。
  2. 再來讓使用者輸入想查詢的課程名稱,然後判斷它是否在 course_scores 這個字典裡。只有在字典裡有這個課程,我們才能查到它的分數。
  3. 若想要更新課程的成績,我們要先檢查這個課程是不是存在於字典裡,然後讓使用者輸入新成績,並更新字典中的值。也可以看到第一個輸出是更改科學成績,然後會有已更新成績的回應。
  4. 最後遍歷字典,列出所有課程和它們的成績。

結語

我覺得元組有點像是“不可變”的列表,更能保護某個重要的資料不會被任意刪除和更改。比如說我可以用元組來存一些不會變的資料,像是座標位置或者日期,這樣就不用擔心會不小心改錯。

再來是字典,這個學起來真的很有趣!字典感覺像是一種隨手可查的資料庫,每個對應一個,像是一個名字對應到某個人的電話號碼一樣。學到字典後,我突然感覺找資料的速度變得超快!而且字典用來存那些成對的數據特別方便,比如學生的名字和成績,或者商品和價格。

我發現不同程式結構有不同的效率,不能總是用列表或是單一的東西來處理所有問題。這讓我開始更注重如何優化程式,不單單是讓它能跑,而是讓它跑得更快、跑得更好><


上一篇
從0開始學習Python---for 迴圈、九九乘法表、質數判斷
下一篇
從0開始學習Python---集合(Set)
系列文
從0開始學習Python-為未來學習AI奠定基礎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言