Python 中的 range() 函數詳解:新手指南
更新日期: 2024 年 9 月 26 日
在 Python 編程中,range() 函數 是一個非常常用且強大的工具,特別是在需要生成數字序列或控制迴圈時。
對於剛開始學習 Python 的新手來說,理解並掌握 range() 函數的用法,將大大提升你在編程中的效率和能力。
本文將詳細介紹 Python 中的 range() 函數,包括其基本用法、參數說明、實際應用和注意事項,並提供豐富的示例,幫助你在實際開發中靈活運用。
什麼是 range() 函數?
定義
range() 函數是 Python 的內建函數,用於生成一個不可變的數字序列。
這個序列通常用於迴圈中,特別是 for 迴圈,以便在一定範圍內執行迭代操作。
特點
- 生成數字序列:range() 生成的是一個數字序列,可用於遍歷。
- 不可變性:生成的對象是不可變的 range 類型,不是列表。
- 高效性:range() 生成的對象是惰性的,只有在需要時才會計算,節省記憶體。
range() 函數的基本語法
range(stop)
range(start, stop[, step])
- start(可選):序列開始的數字,默認為
0
。 - stop:序列結束的數字(不包含該數字)。
- step(可選):序列中數字之間的差,默認為
1
。
range() 函數的用法示例
只有 stop 參數
當只指定一個參數時,該參數被視為 stop,序列從 0 開始。
示例:
for i in range(5):
print(i)
輸出:
0
1
2
3
4
解釋:
- 生成的序列是 0, 1, 2, 3, 4,不包含 stop 值 5。
指定 start 和 stop
示例:
for i in range(2, 7):
print(i)
輸出:
2
3
4
5
6
解釋:
- 生成的序列從 2 開始,到 6 結束,不包含 stop 值 7。
指定 start、stop 和 step
示例:
for i in range(1, 10, 2):
print(i)
輸出:
1
3
5
7
9
解釋:
- 生成的序列從 1 開始,每次增加 2,直到小於 10。
使用負的 step
示例:
for i in range(10, 0, -2):
print(i)
輸出:
10
8
6
4
2
解釋:
- 生成的序列從 10 開始,每次減少 2,直到大於 0。
range() 與列表的關係
將 range() 轉換為列表
雖然 range() 生成的不是列表,但可以使用 list() 函數將其轉換為列表。
示例:
numbers = list(range(5))
print(numbers)
輸出:
[0, 1, 2, 3, 4]
使用列表推導式與 range()
示例:
squares = [i**2 for i in range(1, 6)]
print(squares)
輸出:
[1, 4, 9, 16, 25]
解釋:
- 使用列表推導式生成 1 到 5 的平方數列表。
實際應用示例
計算 1 到 100 的總和
total = 0
for i in range(1, 101):
total += i
print(f"1 到 100 的總和是:{total}")
輸出:
1 到 100 的總和是:5050
遍歷列表的索引
fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
print(f"索引 {i}: {fruits[i]}")
輸出:
索引 0: apple
索引 1: banana
索引 2: cherry
反向遍歷列表
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers)-1, -1, -1):
print(numbers[i])
輸出:
5
4
3
2
1
生成偶數列表
evens = list(range(0, 21, 2))
print(evens)
輸出:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
range() 的注意事項
stop 值不包含在序列中
- range() 生成的序列不包含 stop 值。
示例:
for i in range(5):
print(i)
- 輸出為 0 到 4,不包含 5。
step 為零時會引發錯誤
- 錯誤示例:
for i in range(1, 10, 0):
print(i)
- 錯誤訊息:
ValueError: range() arg 3 must not be zero
- 解決方案: 確保 step 不為零。
range() 不支持浮點數
- range() 的參數必須是整數,不能是浮點數。
錯誤示例:
for i in range(0.5, 5.5, 0.5):
print(i)
- 錯誤訊息:
TypeError: 'float' object cannot be interpreted as an integer
- 解決方案: 如果需要浮點數序列,可以使用 numpy 模組或使用列表推導式。
與其他函數的結合使用
與 enumerate() 一起使用
- 示例:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
輸出:
1: apple
2: banana
3: cherry
與 zip() 一起使用
- 示例:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for i in range(len(names)):
print(f"{names[i]} 的年齡是 {ages[i]} 歲。")
輸出:
Alice 的年齡是 25 歲。
Bob 的年齡是 30 歲。
Charlie 的年齡是 35 歲。
range() 在 Python 2 和 Python 3 中的區別
- Python 2 中的 range(): 返回列表,會立即生成整個序列,可能導致記憶體佔用過大。
- Python 3 中的 range(): 返回一個
range
對象,類似於生成器,只有在需要時才生成數值,更加高效。
range() 的替代方案
使用 numpy.arange()
- 適用於需要浮點數序列的情況。
示例:
import numpy as np
for i in np.arange(0.5, 5.5, 0.5):
print(i)
輸出:
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
2. 使用生成器表達式
- 自定義生成序列的方式。
示例:
def float_range(start, stop, step):
while start < stop:
yield start
start += step
for i in float_range(0.5, 5.5, 0.5):
print(i)
總結
- range() 函數 是生成數字序列的強大工具,廣泛用於迴圈控制和序列生成。
- 三種參數模式:range(stop)、range(start, stop)、range(start, stop, step)。
- 注意事項:stop 值不包含在序列中,step 不能為零,參數必須是整數。
- 實際應用:計算總和、遍歷索引、生成數列等。
- 高級用法:與 enumerate()、zip() 等函數結合使用,或使用 numpy、生成器等替代方案。