Python list vs. range:深入探討差異與最佳實務

JayLinXR-avatar-img
發佈於軟體開發 個房間
更新於 發佈於 閱讀時間約 6 分鐘

這篇文章深入探討了 Python 中 list 與 range 的不同點,包括它們的定義、記憶體效能、可變性以及最佳的使用時機,並且提供了程式範例與小測驗,協助你快速掌握這兩種序列結構的運用。


在 Python 中,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,從 020 產生數列,並排除 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




留言
avatar-img
留言分享你的想法!
avatar-img
JayLinXR
13會員
39內容數
設計 + 程式,是一個出版對設計和程式的學習影片和教學文章,目的是為了讓大家能加快學習最新技術以及設計相關題目去思考如何改變產品的設計體驗。 請追蹤JayLinXR獲得最新消息: https://www.youtube.com/@jaylinxr
JayLinXR的其他內容
2025/07/17
AI程式輔助工具的崛起,例如Vibe Coding,引發了開發者是否會被取代的討論。本文認為AI將改變軟體開發方式,而非完全取代開發者。未來開發者角色將轉變為AI架構師,需具備問題分解、系統設計、創意解決方案和人類判斷等能力。扎實的資料結構與演算法、系統設計、程式碼分析和提示工程等基礎技能將更顯重要
Thumbnail
2025/07/17
AI程式輔助工具的崛起,例如Vibe Coding,引發了開發者是否會被取代的討論。本文認為AI將改變軟體開發方式,而非完全取代開發者。未來開發者角色將轉變為AI架構師,需具備問題分解、系統設計、創意解決方案和人類判斷等能力。扎實的資料結構與演算法、系統設計、程式碼分析和提示工程等基礎技能將更顯重要
Thumbnail
2025/07/14
Python 列表、元組和字典是三種常用的資料結構,各有特性與使用情境。列表可變動且有序,元組不可變動且有序,字典可變動但無序,以鍵值對儲存資料。文章說明其差異,並以程式碼範例、選擇題及任務挑戰加強學習。
Thumbnail
2025/07/14
Python 列表、元組和字典是三種常用的資料結構,各有特性與使用情境。列表可變動且有序,元組不可變動且有序,字典可變動但無序,以鍵值對儲存資料。文章說明其差異,並以程式碼範例、選擇題及任務挑戰加強學習。
Thumbnail
2025/07/02
這篇文章探討 Python 索引存取和切片的使用,特別是 `seq[start:stop:step]` 切片語法在程式碼中的應用,並指出程式碼中可能存在的錯誤及更正方法。
Thumbnail
2025/07/02
這篇文章探討 Python 索引存取和切片的使用,特別是 `seq[start:stop:step]` 切片語法在程式碼中的應用,並指出程式碼中可能存在的錯誤及更正方法。
Thumbnail
看更多
你可能也想看
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
當我們在做很多處理時,結果可能會是List包住一些數值,例如找輪廓或連通域分析時,沒有剛好的特徵可能就會有List含(空值得)形式出現。 為了避免報錯,我們就要額外先做一些處理,先做判斷是否有值在往下一個階段。 all 和 any 是 Python 中用於檢查可迭代物件(如清單、元組、集合等)
Thumbnail
當我們在做很多處理時,結果可能會是List包住一些數值,例如找輪廓或連通域分析時,沒有剛好的特徵可能就會有List含(空值得)形式出現。 為了避免報錯,我們就要額外先做一些處理,先做判斷是否有值在往下一個階段。 all 和 any 是 Python 中用於檢查可迭代物件(如清單、元組、集合等)
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
Thumbnail
在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News