Python 陣列完整指南|List、Tuple、NumPy 的差異與使用方式

目次

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 的情況

  1. 需要修改資料內容時
users = ["Alice", "Bob", "Charlie"]
users.append("David")  # 新增使用者
print(users)  # ['Alice', 'Bob', 'Charlie', 'David']
  1. 需要處理可變長度的資料時
user_input = []
while True:
    data = input("請輸入資料(輸入 exit 結束):")
    if data == "exit":
        break
    user_input.append(data)
print(user_input)

✅ 適合使用 Tuple 的情況

  1. 資料不應被修改時
weekdays = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
  1. 需要將其用作 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 互相轉換,靈活管理資料。
  • 掌握排序與隨機操作,可實現更進階的資料處理。
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

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)之後,你將能更有效率地管理與處理資料。

請務必實際動手寫程式練習看看!