iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
DevOps

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

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

  • 分享至 

  • xImage
  •  

學習原因:

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

學習目標:

  • 認識 list, tuple, setdict 的差異與應用

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
    
  • dictkey 是有迭代性的,可用 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) }}
直播中

尚未有邦友留言

立即登入留言