更新於 2024/12/12閱讀時間約 6 分鐘

[Python 筆記] 新手指南:使用元組管理地理資訊數據

Hi guys! How are you doing? 沒想到已經是第四天了,今天我和我的論文指導教授 Meeting,會後花了一整天思考實驗的設計以及修改論文,直到現在才有空。今天我們一樣繼續分享我的 Python 筆記。

Introduction

這次的主題最後一種資料結構——Tuple(元組)。元組有兩個主要特點:有順序(Ordered)不可變(Immutable),這意味著元組一旦創建,其內容就無法再被修改。元組的數據會使用小括號 () 包起來,看起來簡潔又直觀。

優點:

  • 確保資料完整性(Data Integrity): 由於元組是不可變的,其內容一旦定義便無法被修改、添加或刪除,因此非常適合儲存需要保持穩定、不易被意外更動的數據。例如,用於配置設定(configuration settings)或存儲固定不變的資料,如地理座標等。
  • 效能高: 元組因其不可變性(immutability),在訪問和處理速度上比列表(list)更快。
  • 可哈希(Hashable): 元組可以作為字典的鍵(key),前提是元組中的所有元素都必須是可哈希的(hashable)。 [備註: 這個部分下面的 Code 會解釋]

Coding Example

今天的教學我們一樣以旅遊地點為主題進行練習。首先,讓我們先來看看資料的長相。

# 宣告變數
new_york_location = (40.7128, -74.0060)
los_angeles_location = (34.0522, -118.2437)關於前面提到的不可變性,讀者可以嘗試執行下面這段簡單的代碼。你會收到一個 TypeError,提示元組不支持項目分配 (item assignment)

關於前面提到的不可變性,讀者可以嘗試執行下面這段簡單的代碼。你會收到一個 TypeError,提示元組不支持項目分配 (item assignment) 。

new_york_location[0] = 123 # TypeError: 'tuple' object does not support item assignment
  1. 讀取 - 索引與切片 (Indexing and Slicing) - 元素是有序的,因此可以使用索引或切片操作來訪問特定元素
# 假設我想知道紐約的經度和洛杉磯的緯度
new_york_location[0] # output: 40.7128
los_angeles_location[1] # output: -118.2437

# 現在元組內只有兩個元素,沒有使用切片的必要,但當元素增加時,切片是很實用的技巧
new_york_location[0:2]
  1. 解包 (Unpacking) - 元組支持解包操作,可以將元組中的元素分別指定給多個變數。
new_york_long, new_york_lat = new_york_location
print(new_york_long, new_york_lat) # output: 40.7128 -74.006
  1. 元組作為字典的鍵(key):假設你今天想要建立一個字典,其中鍵是地點的經緯度,值是經緯度對應到的國家或城市...我們可以這樣做。
locations = { 
(40.7128, -74.0060): "New York",
(34.0522, -118.2437): "Los Angeles"
}

print(locations[(40.7128, -74.0060)]) # output: New York


關於元組的教學相對較簡單,主要是因為元組的函式較少。不過在這個教學的最後,我準備了一個 Coding 題目,以及兩個觀念題。邀請各位讀者一起練習,希望大家能夠透過這些練習,進一步加深對元組的理解和應用。


Coding Question

  1. 假設你有一個元組 city_info,其中包含城市的名稱、人口數量和面積。現在你想從這個元組中獲取城市的名稱和面積。
    1. 定義一個元組 city_info,其中包括城市名稱、人口數量和面積。
    2. 使用索引或切片來訪問這個元組中的城市名稱和面積,並將它們分別儲存到兩個變數中。
    3. 最後,印出這兩個變數的值。

Concept Question

  1. 你是否能說出元組的特性以及優點?
  2. 你是否能舉例什麼樣的資料適合使用元組儲存?

Conclusion

今天的 Tuple(元組)教學就到這裡啦!希望大家透過這篇文章對元組有更深入的了解。如果你對文章中提到的操作或應用有任何問題,歡迎在留言區討論,或者分享你用元組解決問題的經驗!也別忘了試試我提供的練習題目喔!祝大家練習順利,我們下次見啦~


Reference


分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.