CodeGym /課程 /Python SELF TW /固定大小的陣列

固定大小的陣列

Python SELF TW
等級 52 , 課堂 2
開放

9.1 固定大小陣列的特點

固定大小的陣列 — 就是那些在創建時決定了大小,並且在程式執行過程中不能改變大小的陣列。在 Python 中,可以使用 array 來創建固定大小的陣列,或者使用 list。雖然在 Python 中 list 是動態的,但是用法上和其他語言中的陣列類似。

固定大小陣列的特點:

  • 固定大小: 陣列的大小在創建時就設定好,之後不能改變。
  • 同質性: 陣列中的所有元素必須是同一類型。
  • 快速的索引訪問: 訪問陣列中的元素耗時是常數時間 O(1)
  • 大小不可變: 陣列的元素數量是固定的,不能新增元素。

在 Python 中創建固定大小陣列的範例:

使用庫 array:


import array

# 創建一個整數陣列 (使用 'i' 表示 int 類型)
arr = array.array('i', [1, 2, 3, 4, 5])

# 訪問元素
print(arr[2])  # 輸出: 3

# 修改元素值
arr[2] = 10
print(arr)  # 輸出: array('i', [1, 2, 10, 4, 5])

使用 list 模擬固定大小的陣列:


# 創建固定大小的 list
arr = [0] * 5

# 初始化元素
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

# 訪問元素
print(arr[2])  # 輸出: 3

# 修改元素值
arr[2] = 10
print(arr)  # 輸出: [1, 2, 10, 4, 5]

9.2 固定大小陣列的優缺點

每種東西都有自己的優缺點,固定大小的陣列也不例外。

優點:

  • 快速的索引訪問: 訪問陣列中的任何元素耗時是常數時間 O(1),這使得陣列在讀取資料時非常高效。
  • 實現簡單: 陣列易於理解和使用,在各種任務中容易實現和應用。
  • 高效的記憶體使用: 由於陣列的大小是固定的,記憶體在陣列創建時就已分配好,這避免了記憶體重新分配的開銷。
  • 可預測性: 陣列的固定大小簡化了記憶體管理,資源使用更加可預測。

缺點:

  • 大小不可變: 陣列的大小在創建時決定,不能改變。這意味著需要提前知道所需的陣列大小,或者必須冒著浪費記憶體的風險。
  • 插入和刪除的成本: 插入和刪除元素可能會耗費時間,因為這需要移動元素。在最壞的情況下,中間插入或刪除元素需要 O(n) 的時間。
  • 記憶體使用不充分: 如果陣列未完全使用,未使用的記憶體單元將會空置,這可能導致記憶體使用的不效率。
  • 靈活性有限: 陣列不允許動態改變大小,這使得它們比動態資料結構(如 list)更不靈活。

9.3 使用範例和應用

以下是一些使用和應用固定大小陣列的範例。

範例 1: 表格和矩陣

固定大小的陣列常用於表示表格和矩陣,這些表格和矩陣的大小是預先知道的。


import numpy as np

# 創建一個 3x3 的固定大小矩陣
matrix = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

# 訪問矩陣中的元素
print(matrix[1][2])  # 輸出: 6

# 修改矩陣中的元素
matrix[1][2] = 10
print(matrix)
# 輸出:
# [[ 1  2  3]
#  [ 4  5 10]
#  [ 7  8  9]]

範例 2: 緩衝區和快取

固定大小的陣列用於創建緩衝區和快取,這些緩衝區的大小是預先知道且不改變的。


# 用於讀取資料的固定大小緩衝區
buffer_size = 1024
buffer = bytearray(buffer_size)

# 使用資料填充緩衝區
data = b"Hello, World!"
buffer[:len(data)] = data

print(buffer[:len(data)])  # 輸出: b'Hello, World!'

範例 3: 存儲時間和日期的資料

固定大小的陣列可以用於存儲時間和日期的資料,例如每個月的天數。

在這個範例中,我們通過 list 類模擬固定陣列的行為:


# 每個月的天數(非閏年)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

# 訪問資料
month = 2  # 二月
print(f"二月有 {days_in_month[month - 1]} 天")  # 輸出: 二月有 28 天
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION