Python 中的 enumerate() 函數詳解:新手指南

更新日期: 2024 年 10 月 3 日

在 Python 編程中,enumerate() 函數 是一個非常實用的內建函數,特別是在需要同時獲取序列的索引和值時。

對於剛開始學習 Python 的新手來說,理解並掌握 enumerate() 函數的用法,將大大提升你在迭代和遍歷序列時的效率和靈活性。

本文將詳細介紹 Python 中的 enumerate() 函數,包括其基本用法、參數說明、實際應用和注意事項,並提供豐富的示例,幫助你在實際開發中靈活運用。


什麼是 enumerate() 函數?

定義

enumerate() 是 Python 的內建函數,用於在遍歷可迭代物件(如列表、元組、字串等)時,同時獲取元素的索引和值。

它返回一個 enumerate 物件,可以在迭代時產生索引和值的元組。

特點

  • 簡潔性:避免手動維護索引變量,代碼更清晰。
  • 靈活性:可以指定索引的起始值,默認從 0 開始。
  • 適用性:適用於所有可迭代物件。

enumerate() 函數的基本語法

enumerate(iterable, start=0)
  • iterable:要迭代的可迭代物件。
  • start(可選):索引起始值,默認為 0。

enumerate() 函數的用法示例

遍歷列表

示例:

fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

輸出:

0: apple
1: banana
2: cherry

解釋:

  • enumerate(fruits) 返回一個 enumerate 物件,在迭代時產生 (index, value) 元組。
  • index:元素的索引,從 0 開始。
  • fruit:列表中的元素。

指定索引起始值

示例:

fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits, start=1):
    print(f"{index}: {fruit}")

輸出:

1: apple
2: banana
3: cherry

解釋:

  • 設置 start=1,索引從 1 開始計數。

遍歷字串

示例:

text = "Python"
for index, char in enumerate(text):
    print(f"字元 {char} 的索引是 {index}")

輸出:

字元 P 的索引是 0
字元 y 的索引是 1
字元 t 的索引是 2
字元 h 的索引是 3
字元 o 的索引是 4
字元 n 的索引是 5

遍歷元組

示例:

numbers = (10, 20, 30)
for index, num in enumerate(numbers):
    print(f"索引 {index} 對應的數字是 {num}")

輸出:

索引 0 對應的數字是 10
索引 1 對應的數字是 20
索引 2 對應的數字是 30

為什麼使用 enumerate() 函數?

代碼更簡潔

  • 不使用 enumerate():
  index = 0
  for fruit in fruits:
      print(f"{index}: {fruit}")
      index += 1
  • 使用 enumerate():
  for index, fruit in enumerate(fruits):
      print(f"{index}: {fruit}")
  • 優勢:使用 enumerate() 無需手動維護索引變量,代碼更清晰。

提高可讀性

  • 明確的結構:enumerate() 直接提供索引和值,讓迭代過程更加直觀。

減少錯誤

  • 避免索引錯誤:手動維護索引容易出現遺漏或錯誤,使用 enumerate() 可以減少這類問題。

實際應用示例

找到列表中某個值的所有索引

示例:

numbers = [3, 5, 2, 3, 7, 3, 9]
target = 3
indices = []

for index, num in enumerate(numbers):
    if num == target:
        indices.append(index)

print(f"數字 {target} 出現在索引位置:{indices}")

輸出:

數字 3 出現在索引位置:[0, 3, 5]

同時遍歷多個列表

示例:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

for index, name in enumerate(names):
    age = ages[index]
    print(f"{name} 的年齡是 {age} 歲。")

輸出:

Alice 的年齡是 25 歲。
Bob 的年齡是 30 歲。
Charlie 的年齡是 35 歲。

遍歷列表時修改元素

示例:

fruits = ['apple', 'banana', 'cherry']

for index, fruit in enumerate(fruits):
    fruits[index] = fruit.upper()

print(fruits)

輸出:

['APPLE', 'BANANA', 'CHERRY']

enumerate() 與其他函數的結合使用

與 zip() 結合

  • zip():用於將多個可迭代物件壓縮成元組。
  • 示例:
  letters = ['a', 'b', 'c']
  numbers = [1, 2, 3]

  for index, (letter, number) in enumerate(zip(letters, numbers)):
      print(f"索引 {index}: {letter} - {number}")

輸出:

  索引 0: a - 1
  索引 1: b - 2
  索引 2: c - 3

與列表推導式結合

  • 示例:
  fruits = ['apple', 'banana', 'cherry']
  indexed_fruits = [(index, fruit) for index, fruit in enumerate(fruits, start=1)]
  print(indexed_fruits)

輸出:

  [(1, 'apple'), (2, 'banana'), (3, 'cherry')]

enumerate() 的注意事項

索引起始值

  • 默認值:索引從 0 開始。
  • 自定義起始值:可以使用 start 參數指定。
  enumerate(iterable, start=10)

可迭代物件

  • 支持所有可迭代物件:如列表、元組、字串、集合等。
  • 注意:字典遍歷時,enumerate() 會返回鍵的索引和值。 示例:
  my_dict = {'a': 1, 'b': 2, 'c': 3}
  for index, key in enumerate(my_dict):
      print(f"索引 {index}: {key} - {my_dict[key]}")

輸出:

  索引 0: a - 1
  索引 1: b - 2
  索引 2: c - 3

不要修改迭代中的可迭代物件

  • 風險:在迭代過程中修改可迭代物件,可能導致意外行為。
  • 建議:如需修改,考慮迭代副本或使用索引進行修改。

與手動維護索引的比較

手動維護索引的缺點

  • 代碼冗長:需要額外的變量來維護索引。
  • 容易出錯:可能忘記更新索引或更新錯誤。

使用 enumerate() 的優勢

  • 代碼簡潔:內建索引管理,無需額外變量。
  • 可讀性高:結構清晰,一目了然。

總結

  • enumerate() 函數 是遍歷可迭代物件時,同時獲取索引和值的便利工具。
  • 基本用法:for index, value in enumerate(iterable, start=0):
  • 實際應用:查找元素索引、同時遍歷多個列表、修改列表元素等。
  • 注意事項:正確使用 start 參數,不要在迭代過程中修改可迭代物件。

延伸閱讀

Similar Posts

發佈留言

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