這篇文章深入探討了 Python 中 list 與 range 的不同點,包括它們的定義、記憶體效能、可變性以及最佳的使用時機,並且提供了程式範例與小測驗,協助你快速掌握這兩種序列結構的運用。
list
(列表)與 range
(範圍)是兩種不同的資料結構,它們在特性與使用情境上有所不同。🔹 主要差異
- 定義:
list
是一種有序的資料集合,可以包含任何型別的元素。range
則表示一段不可變的整數序列。
- 記憶體效率:
list
會將每個元素都存在記憶體中。range
只儲存起點、終點和步長,因此非常節省記憶體。
- 可變性:
list
是可變的(mutable),可以新增、修改或刪除元素。range
是不可變的(immutable),無法修改。
- 使用情境:
list
適合儲存多種型別資料,並進行操作與處理。range
通常用來產生連續整數序列,尤其是在for
迴圈中。
my_range = range(1, 6)
print(my_range) # 輸出:range(1, 6)
# From range to list
print(list(my_range)) # 輸出:[1, 2, 3, 4, 5]
type(list(my_range)) # list
for x in range(4)
print(x)
# Outcome
0
1
2
3
for y in list(range(4)):
print(y)
# Outcome
0
1
2
3
📌 什麼時候該把 range 轉為 list?
- 輸出更清楚:可以清楚看到實際的數字序列。
- 可以操作數據:像是
.append()
、.remove()
、.sort()
等方法都只有list
才有。 - 支援切片與串接:
range
不支援複雜操作,轉成list
才可以使用。
📝 練習題
1. 填空題
r = range(2, 10, 2)
print(list(r))
# 輸出:[2, 4, 6, 8]
# 因為 range(2, 10, 2) 生成了一個從 2 開始,到不包括 10,步進值為 2 的序列。
然後,list(r) 把這個範圍轉換成了一個列表,所以最後的輸出就是 [2, 4, 6, 8]。
2. 判斷題
以下敘述是否正確?
range
物件可以使用.append()
方法加入新元素。❌ 錯誤
說明:
range
是不可變(immutable)的範圍物件,無法使用.append()
方法。如果你想要能新增元素的資料結構,應使用
list
。
3. 選擇題
什麼情況下應該使用 list
而不是 range
?
(A) 在 for
迴圈中計數
(B) 需要插入或移除中間的元素
(C) 只想知道是否有數字存在某個範圍
=> 正確答案是:(B) 需要插入或移除中間的元素
說明:
- (A)
range
是計數的理想選擇,因為它效率高且不需轉為 list。 - (B) 正確。
list
支援動態增刪元素,range
不支援。 - (C) 如果只要判斷數字是否在範圍中,
range
是夠用的,效率也較好。
4. Debug 題
以下程式是否有錯?
nums = list(range(3))
nums[3] = 100
print(nums)
答:錯誤。因為索引 3 不存在,會產生
IndexError
。說明:
nums
是[0, 1, 2]
,只有索引0~2
。直接指定
nums[3] = 100
會產生:IndexError: list assignment index out of range
5. 實作題
請寫一行程式碼,產生一個 0 到 20(含 20)的數列,但排除數字 5。
print([i for i in range(21) if i != 5])
#這段使用 list comprehension,從 0 到 20 產生數列,並排除 5。
# [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
額外資源教學
Figma UX/UI手機App設計教學:點子成行到製作出一個App 系列教學 -https://vocus.cc/article/663ddefafd89780001db6e7c
如何用FIgma製作個人作品集教學
- https://vocus.cc/article/645c733dfd89780001ffe890
影片教學
JayLinXR YT: https://www.youtube.com/@jaylinxr