iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
DevOps

從 0 開始培育成為自動化測試工程師的學習指南系列 第 4 篇

Day 04: Python 的 list, tuple, set 和 dict

  • 分享至 

  • xImage
  •  

學習原因:

在測試的時候,很常需要作大量的數據處理,在 Python 我們會常用到這些資料結構 (list, tuple, set, dict) 來組織和存儲數據以便有效地訪問和操作。不同的資料結構在不同的操作上有不同的性能優勢,因此需要理解這些資料結構的分別,日後可根據應用的需求來選擇使用。

學習目標:

  • 認識 list, tuple, set 和 dict 的差異與應用

list:

  • 由一連串資料組成,資料的型別可以不同,有順序性,內容可被改變。

  • 以 [] 來作標記,並以 (,) 來分隔資料。

  • 由於 list 是有順序性,可以 索引 (index) 來取 list 中的數值。索引為 list 元素的順位,從 0 開始計算。

    # a_list 跟 b_list 的內容相同,但順序不同,會被視為 2 個不相同的 List
    
    a_list = [1, 'a', 2, 'b']
    b_list = ['a', 1, 'b', 2]
    print(a_list == b_list)
    
    print(a_list[0])  # 取得第 1 位的值
    print(b_list[3])  # 取得第 4 位的值
    
    print(a_list[-1])  # 取得倒數第 1 位的值
    
    # 亦可修改 list 的內容
    a_list[0] = 4
    print(a_list)
    

    Output:

    False
    1
    2
    'b'
    [4, "a", 2, "b"]
    
  • list 是有 迭代性 (iterable),可以通過 for loop 來取得當中的值,寫法可以有 3 種:

    num_list = [2, 4, 6, 8]
    
    for num in num_list:
    	print(num)
    
    num_list = [2, 4, 6, 8]
    
    # 利用內建的 len() 取得 list 的資料數量
    # 再用 range() 取得 list 每個元素的 index
    for index in range(len(num_list))
    
    	# index 分別會是 0, 1, 2, 3
    	print(num_list[index])
    
    # enumerate() 是內建函數,可同時取得 list 的 index 和值。
    # 當需要同時取得 list 的 index 和值的時候很有用。
    for index, num in enumerate(num_list):
    	print(index)
    	print(num)
    
  • list 相對是最常用的容器型別,並非不可變的資料 / 需要作集合的運算時,都會使用 list 儲存多個資料。

tuple :

  • 同樣由一連串資料組成,資料的型別可以不同,亦有順序性,但內容定義後則不能改變。

  • 以 () 來作標記,並以 (,) 來分隔資料。

  • 與 list 相似,可以 index 取值,也可以用 for loop 取得每個元素。

    a_tuple = (1, "a", 2, "b")
    
    # 會出現錯誤,因為 tuple 不能修改內容
    a_tuple[0] = 3
    

    Output:

    ==> TypeError: 'tuple' object does not support item assignment
    
  • 應用跟 list 相似,只能儲存一些不會被變更的資料,但執行的效比 List 好。

set:

  • 同樣由一連串資料組成,資料的型別可不同,內容可改變,但沒有順序,還有一個特點是內容不可重複。概念跟數學的集合相似。

  • 以 {} 來作標記,並以 (,) 來分隔資料。

  • 由於沒有順序性,不能用 index 取值

  • 但有迭代性,可用 for loop 取得每個元素。由於 set 是沒有順序,所以取得值的順序跟添加的順序可能不一樣。

    a_list = [1, 1, "a", "a"]
    
    # 可應用 set() 把 a_list 轉換成 set,過程中會把相同的資料刪除。
    a_set = set(a_list)
    print(a_set)
    
    # 會出現錯誤,因為沒有順序性,所以不能用 index 取值。
    print(a_set[0])
    

    Output:

    {1, 'a'}
    
    ==> TypeError: 'set' object is not subscriptable
    
  • 一般應用在應用集合的運算,如交集,聯集,差集等數學運算,這類型的運算執行效率比 list 好。還有一種用法是用來刪除重複的元素。

dict:

  • 如同字典的應用,以鍵 key 做為索引以取得字典裡面的值 value ,稱為 key-value pair。當中 Key 必須是唯一的。

  • 以 {"key":"value"} 作標記,以 (,) 來分隔不同的 key-value

  • 沒有順序性,無法用 index 取值,需要以 key 取值。

    # 建立有 3 對 key-value 的字典
    person_a = {
        "name": "mary", 
        "sex": "F",
        "age": 20
    }
    
    # 可應用 Key 取值
    print(person_a["name"])
    print(person_a["age"])
    

    Output:

    "mary"
    20
    
  • 而 dict 的 key 是有迭代性的,可用 for loop 取得 dict 內的每一個 key,從而得到對應的值。

    person_a = {
        "name": "mary", 
        "sex": "F",
        "age": 20
    }
    
    # dict 的內建 function keys(),可以取得 dict 的所有 key list
    # 再透過 for loop 讀取每個 key
    for key in person_a.keys():
    	print(f"{key}: {person_a[key]}")
    

    Output:

    name: mary
    sex: F
    age: 20
    
  • 一般 dict 是用作包裝大量的資訊。如上例可包裝個人資料。日後作 API 測試,將會透過 API 取得回傳的資料,將會是以 dict 的格式存儲,因此將會應用 dict 作大量的操作。

簡單總結一下它們之間的差異

順序性 迭代性 內容可變 應用範圍
list 有 有 可 最常用的容器型態
tuple 有 有 不可 儲存一些不會被變更的資料
set 沒有 有 可 集合的運算
dict 沒有 當中的 key 有迭代性 可 用作包裝大量的資訊

以上只是它們的簡單介紹,而每種容器型別都有內建的 function 作對應的數據處理,可參看 Python 的官方文件了解它們的各種用法。

基礎的程式語法介紹到這裡了,應該已經有能力可以處理很多的問題,只是需要時間練習而已。
明天再來說演算法和 Big O Notation,來認識程式的效能比較。


上一篇
Day 03: 程式流程控制
下一篇
Day 05: 演算法與 Big O Notation
系列文
從 0 開始培育成為自動化測試工程師的學習指南 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言