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 到 100 的總和

total = 0
for i in range(1, 101):
    total += i
print(f"1 到 100 的總和是:{total}")

輸出:

1100 的總和是: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、生成器等替代方案。

延伸閱讀

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *