1. 前言
Python 是一種具有簡潔且直觀語法的程式語言,廣泛應用於各個領域。其中,「陣列」在資料的管理與操作中扮演著重要角色。
不過,Python 中不像 C 語言那樣有「陣列型別」,而是使用 List(串列)、Tuple(元組)、NumPy 陣列(ndarray) 等資料結構。由於這些資料結構各有其特性與使用情境,選擇合適的資料結構非常重要。
什麼是 Python 的陣列?
- List(串列):可變動、彈性高的資料結構
- Tuple(元組):不可變動,執行效率高
- NumPy 陣列(ndarray):專為數值計算與資料分析而設計的陣列型別
本文將完整介紹 Python 陣列的基礎與進階用法。透過實際程式碼範例,讓初學者也能輕鬆理解與掌握。
2. 什麼是 Python 的陣列?(List、Tuple、NumPy)
在 Python 中,並沒有提供傳統意義上的「陣列」型別。因此,一般情況下會使用 List(串列) 來進行類似陣列的資料處理。
如果要處理不可變的資料,可以使用 Tuple(元組);若需進行高效的數值運算,則使用 NumPy 的 ndarray。
Python 中常用來表示陣列的資料結構
資料結構 | 特點 | 適用情境 |
---|---|---|
List(串列) | 可變動,適合彈性操作資料 | 一般的陣列操作 |
Tuple(元組) | 不可變動,處理速度快 | 管理不需變動的資料 |
NumPy 陣列(ndarray) | 適合大規模數值運算與資料分析 | 科學計算、機器學習 |
List、Tuple、NumPy 陣列的基本用法
在 Python 中,可以用以下方式建立 List、Tuple、NumPy 陣列:
import numpy as np
# 建立 List(串列)
my_list = [1, 2, 3, 4, 5]
# 建立 Tuple(元組)
my_tuple = (1, 2, 3, 4, 5)
# 建立 NumPy 陣列
my_array = np.array([1, 2, 3, 4, 5])
print(my_list) # [1, 2, 3, 4, 5]
print(my_tuple) # (1, 2, 3, 4, 5)
print(my_array) # [1 2 3 4 5]
List、Tuple、NumPy 陣列的差異比較
項目 | List(串列) | Tuple(元組) | NumPy 陣列(ndarray) |
---|---|---|---|
是否可變 | ✅ 可變 | ❌ 不可變 | ✅ 可變 |
處理速度 | 一般 | 快 | 非常快 |
記憶體使用 | 較多 | 較少 | 已最佳化 |
常見用途 | 一般資料操作 | 管理固定資料 | 科學運算、機器學習 |
3. 了解 Python 的 List(串列)
Python 的 List(串列)是一種可變長度(mutable)的資料結構,類似於陣列。使用串列可以將數字、字串等不同資料型態的值放入同一個資料結構中。List 是 Python 中最基本且最常使用的資料結構之一。
List 的基本操作
建立 List 的方法
在 Python 中,List 是使用中括號 []
來建立 的。
# 建立空的 List
empty_list = []
# 包含數字的 List
numbers = [1, 2, 3, 4, 5]
# 包含字串的 List
fruits = ["apple", "banana", "cherry"]
# 也可以混合不同資料型別
mixed_list = [1, "hello", 3.14, True]
print(numbers) # [1, 2, 3, 4, 5]
print(fruits) # ['apple', 'banana', 'cherry']
print(mixed_list) # [1, 'hello', 3.14, True]
存取 List 中的元素
你可以透過索引(index)來存取 List 的元素。Python 的索引從0 開始,也可以使用負數索引從後面開始存取。
fruits = ["apple", "banana", "cherry"]
# 使用索引取得元素
print(fruits[0]) # apple
print(fruits[1]) # banana
# 使用負索引(從後面數)
print(fruits[-1]) # cherry
print(fruits[-2]) # banana
List 的切片(Slice)操作
使用切片可以取得 List 的部分元素。
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 取得前 5 個元素
print(numbers[:5]) # [0, 1, 2, 3, 4]
# 取得第 3 到第 7 個元素(不含 index 7)
print(numbers[2:7]) # [2, 3, 4, 5, 6]
# 取得最後 3 個元素
print(numbers[-3:]) # [7, 8, 9]
# 每隔一個取一個元素
print(numbers[::2]) # [0, 2, 4, 6, 8]
修改 List 中的元素
List 是可變(mutable) 的資料結構,可以直接修改其中的元素。
fruits = ["apple", "banana", "cherry"]
# 修改第二個元素
fruits[1] = "orange"
print(fruits) # ['apple', 'orange', 'cherry']
新增與刪除 List 中的元素
新增元素
你可以使用 append()
或 insert()
方法來新增元素到 List 中。
fruits = ["apple", "banana"]
# 在尾端新增元素
fruits.append("cherry")
print(fruits) # ['apple', 'banana', 'cherry']
# 在指定位置插入元素
fruits.insert(1, "orange")
print(fruits) # ['apple', 'orange', 'banana', 'cherry']
刪除元素
要刪除 List 中的元素,可以使用 remove()
或 pop()
。
fruits = ["apple", "banana", "cherry"]
# 根據值刪除元素
fruits.remove("banana")
print(fruits) # ['apple', 'cherry']
# 根據索引刪除元素
fruits.pop(1)
print(fruits) # ['apple']
List 的合併與複製
合併 List
使用 +
運算子可以合併兩個 List。
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list) # [1, 2, 3, 4, 5, 6]
複製 List
複製 List 時,使用切片 [:]
是比較安全的方式。
original_list = [1, 2, 3]
copied_list = original_list[:]
print(copied_list) # [1, 2, 3]
總結
- List 是可變長度的資料結構,支援新增、刪除與修改元素
- 可以透過索引與切片操作來存取元素
- 學會如何有效地操作 List(新增、刪除、合併、排序等)
4. 了解 Python 的 Tuple(元組)
Python 中的 Tuple(元組) 和 List(串列)類似,都是可以儲存多個值的資料結構,但有一個重要的差異:Tuple 是不可變動(immutable) 的。
也就是說,建立之後的元組,其內容無法修改、無法新增、也無法刪除。
這樣的特性使得 Tuple 適合用在需要保證資料不被更動的場景。此外,相較於 List,Tuple 的記憶體效率更高,執行速度也更快。
Tuple 的基本操作
建立 Tuple 的方法
Tuple 是使用小括號 ()
來建立的。
# 建立 Tuple
fruits = ("apple", "banana", "cherry")
numbers = (1, 2, 3, 4, 5)
print(fruits) # ('apple', 'banana', 'cherry')
print(numbers) # (1, 2, 3, 4, 5)
建立單一元素的 Tuple
當 Tuple 只有一個元素時,需要特別注意:
必須加上逗號 ,
,否則 Python 會將其視為普通的數值或字串。
single_value = (42) # 這不是 Tuple,而是整數
correct_tuple = (42,) # 這才是正確的 Tuple
print(type(single_value)) # <class 'int'>
print(type(correct_tuple)) # <class 'tuple'>
存取 Tuple 中的元素
Tuple 的元素也可以使用索引(index)來存取,與 List 相同,索引從0 開始。
colors = ("red", "green", "blue")
# 使用索引存取元素
print(colors[0]) # red
print(colors[1]) # green
# 使用負索引
print(colors[-1]) # blue
print(colors[-2]) # green
Tuple 的切片(Slice)操作
Tuple 也可以像 List 一樣進行切片(slice)操作。
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
# 取得前 5 個元素
print(numbers[:5]) # (0, 1, 2, 3, 4)
Tuple 與 List 之間的轉換
可以使用 tuple()
與 list()
函式,將 Tuple 和 List 互相轉換。
# List → Tuple
numbers_list = [1, 2, 3]
numbers_tuple = tuple(numbers_list)
print(numbers_tuple) # (1, 2, 3)
# Tuple → List
fruits_tuple = ("apple", "banana", "cherry")
fruits_list = list(fruits_tuple)
print(fruits_list) # ['apple', 'banana', 'cherry']
總結
- Tuple 是不可變的(immutable),建立後無法修改
- 比 List 更省記憶體,執行速度也更快
- 適用於需要保證資料不被更動的場景(如:常數、dictionary 的鍵、函式的回傳值)
- 可以與 List 互相轉換,但若資料會被修改,建議使用 List

5. 【比較表】List vs Tuple — 應該使用哪一個?
在 Python 中,List(串列) 和 Tuple(元組) 都可以用來表示陣列。不過,它們之間有一些重要的差異,正確區分使用情境非常重要。
List 與 Tuple 的差異
首先,以下用一張比較表來說明 List 和 Tuple 的主要差異:
項目 | List(串列) | Tuple(元組) |
---|---|---|
是否可變 | ✅ 可變(可新增、刪除、修改) | ❌ 不可變(immutable) |
執行速度 | 較慢 | 較快 |
記憶體使用 | 較多 | 較少 |
是否可新增或刪除元素 | 可以 | 不可以 |
是否可作為 dictionary 的鍵 | ❌ 不行 | ✅ 可以 |
常見用途 | 管理可變資料 | 管理不可變資料 |
如何選擇使用 List 或 Tuple?
✅ 適合使用 List 的情況
- 需要修改資料內容時
users = ["Alice", "Bob", "Charlie"]
users.append("David") # 新增使用者
print(users) # ['Alice', 'Bob', 'Charlie', 'David']
- 需要處理可變長度的資料時
user_input = []
while True:
data = input("請輸入資料(輸入 exit 結束):")
if data == "exit":
break
user_input.append(data)
print(user_input)
✅ 適合使用 Tuple 的情況
- 資料不應被修改時
weekdays = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
- 需要將其用作 dictionary 的鍵時
location_data = {
(35.6895, 139.6917): "Tokyo",
(40.7128, -74.0060): "New York"
}
print(location_data[(35.6895, 139.6917)]) # Tokyo
總結
- List 是可變資料結構,適合需要新增、刪除、修改資料的情況。
- Tuple 是不可變結構,適合用於不需修改的資料或作為 dictionary 的鍵。
- 若要處理動態資料,List 是更合適的選擇。
6. 陣列操作的進階應用
善用 Python 的 List(串列)和 Tuple(元組),可以實現更高階的資料處理。這一節將介紹陣列操作的進階技巧,讓你能將其應用在實用的程式開發中。
List 推導式(快速建立 List)
# 一般的方式建立平方數 List
squares = []
for x in range(10):
squares.append(x**2)
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 使用 List 推導式(更簡潔)
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
處理多維 List(巢狀結構)
# 建立 3x3 的矩陣
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrix[0]) # [1, 2, 3]
print(matrix[1][2]) # 6
List 與 Dictionary 的互相轉換
# 將兩個 List 合併為 Dictionary
keys = ["name", "age", "city"]
values = ["Alice", 25, "Tokyo"]
person_dict = dict(zip(keys, values))
print(person_dict) # {'name': 'Alice', 'age': 25, 'city': 'Tokyo'}
List 的排序與隨機操作
import random
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers) # 隨機打亂順序
print(numbers) # 範例: [3, 1, 5, 2, 4]
random_choice = random.choice(numbers) # 隨機選取一個元素
print(random_choice) # 範例: 2
總結
- 使用 List 推導式可以更有效率地建立 List。
- 透過多維 List 可以表示矩陣或表格資料。
- 可將 List 與 Dictionary 互相轉換,靈活管理資料。
- 掌握排序與隨機操作,可實現更進階的資料處理。
7. 常見問題(FAQ)
Python 中的 List 和 Tuple 是非常實用的資料結構,但在實際使用中也常會遇到一些疑問。
本章節將以 Q&A 形式,解答有關 List 和 Tuple 的常見問題。
Q1:List 和 Tuple 有什麼不同?
A:最大的不同在於,List 是可變的(mutable),而 Tuple 是不可變的(immutable)。
# List(可變)
my_list = [1, 2, 3]
my_list[0] = 100 # 可以修改
print(my_list) # [100, 2, 3]
# Tuple(不可變)
my_tuple = (1, 2, 3)
my_tuple[0] = 100 # TypeError:'tuple' object does not support item assignment
Q2:正確複製 List 的方法是什麼?
A:建議使用 copy()
或切片 [:]
來複製 List,這樣比較安全。
# 使用切片複製
list_a = [1, 2, 3]
list_b = list_a[:]
list_b[0] = 100
print(list_a) # [1, 2, 3] ← 原本的 List 沒有被改動!
Q3:什麼是 List 推導式(List comprehension)?
# 一般寫法
squares = []
for x in range(10):
squares.append(x**2)
# ✅ 使用 List 推導式寫法更簡潔
squares = [x**2 for x in range(10)]
Q4:如何將 List 轉換成 JSON 格式?
import json
data = [1, 2, 3, 4, 5]
json_data = json.dumps(data)
print(json_data) # "[1, 2, 3, 4, 5]"
Q5:如何將 List 的元素隨機排序?
import random
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers) # 範例: [3, 1, 5, 2, 4]
Q6:NumPy 陣列和 List 有什麼差異?
項目 | List(串列) | NumPy 陣列(ndarray) |
---|---|---|
資料型別 | 可混合任何型別 | 只能是相同型別 |
處理速度 | 較慢 | 較快(以 C 語言實作) |
記憶體使用 | 多 | 少 |
數學運算 | 需要使用 for 迴圈 | 可進行向量化運算(更快速) |
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr * 2) # [2 4 6 8 10]
總結
在本章中,我們針對 Python 的 List 和 Tuple 的常見問題與解決方法進行了說明:
- List 和 Tuple 的差異 → 是否可變動
- 複製 List → 使用
copy()
或切片[:]
- List 推導式 → 可簡化
for
迴圈的寫法 - List 轉換為 JSON → 使用
json.dumps()
/json.loads()
- NumPy 陣列和 List 的比較 → NumPy 更適合用於高效數值運算
8. 總結
本文完整介紹了 Python 中的陣列相關資料結構(List、Tuple、NumPy 陣列),從基礎觀念到進階應用,幫助你全面理解與實作。
本篇文章學到的重點
✅ 什麼是 Python 的陣列?
- Python 沒有像 C 語言那樣的「傳統陣列型別」
- 取而代之的是「List(串列)」「Tuple(元組)」「NumPy 陣列(ndarray)」
✅ Python 的 List
- 可變長度(mutable)的資料結構
- 可以新增、刪除、修改元素
✅ Python 的 Tuple
- 不可變(immutable)的資料結構
- 可作為 dictionary 的鍵使用
- 效能更高、記憶體使用更少
✅ List vs Tuple 比較表
項目 | List(串列) | Tuple(元組) |
---|---|---|
是否可變 | ✅ 可變 | ❌ 不可變 |
執行速度 | 較慢 | 較快 |
記憶體使用 | 較多 | 較少 |
用途 | 管理可變資料 | 管理不可變資料 |
延伸閱讀推薦
📘 Python 官方文件
最後的建議
熟悉 Python 中的陣列結構(List、Tuple、NumPy)之後,你將能更有效率地管理與處理資料。
請務必實際動手寫程式練習看看!