Python 枚舉:示例說明

Python 枚舉:示例說明

使用列表和其他可迭代對像是Python 編程中的一項常見任務。有時,您可能需要循環遍歷這些可迭代對象,同時還要跟踪當前元素的索引或計數。這就是 Python 的內置 enumerate() 函數可以派上用場的地方。

當您遍歷列表或任何可迭代對象時,Python 中的 enumerate() 函數為您提供了一種訪問項目索引和項目本身的便捷方式。

Python 枚舉:示例說明

此功能使您的代碼更 Pythonic、可讀性和高效。它允許您遍曆元素並檢索它們的索引和值。無需在循環內手動初始化和遞增計數器,您可以依靠 enumerate() 為您完成這項工作。

在本文中,您將了解 Python 的內置函數 enumerate() 函數、它在Python代碼中的重要性及其用例。

讓我們開始吧!

目錄

什麼是 Python 枚舉函數?

假設您正在處理一個列表數據結構,並且您想要對每個項目執行某些操作,但您還需要知道該項目在列表中的位置。

如果沒有 Python enumerate(),您可能會決定使用在每次循環迭代中遞增的計數器變量。但這種方法可能容易出錯,而且它不是很“Pythonic”。

Enumerate 是 Python 中的一個內置函數,它使您能夠迭代可迭代對象,同時跟踪當前項的索引。

現在您已經了解了 Python 中的 enumerate() 函數是什麼,讓我們繼續下一節中的 Python enumerate() 函數的語法!

Python 枚舉函數的語法是什麼?

函數的語法定義了您應該如何在代碼中使用該函數,包括它接受的參數和返回的內容。

Python 枚舉:示例說明

enumerate ()函數採用以下語法:

enumerate(, start=0)
  • :這是一個必需的參數,可以是任何 Python 可迭代對象,例如列表或元組。

  • start:第二個參數是可選參數,用於指定計數器的起始值。默認情況下,它設置為 0。

enumerate ()函數的返回值是一個枚舉對象,它是一個迭代器,對於給定的可迭代對像中的每個項目都有成對的(索引,元素) 。

您可以在for 循環中使用此迭代器來同時訪問索引和項目。

以下示例顯示瞭如何對列表使用enumerate()函數:

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

for index, item in enumerate(fruits):
    print(index, item)

在此示例中,enumerate()循環遍歷枚舉對象,即水果列表,並為每個項目分配一個索引,從 0 開始。

然後for循環從枚舉對像中解壓縮索引和項目。這使您能夠根據索引和項目的值執行操作。

我們正在使用打印功能將索引和項目打印到屏幕上。代碼的輸出如下圖所示:

Python 枚舉:示例說明

在輸出中,您可以看到起始索引為 0。這是 Python 解釋器自動分配的索引的默認值。

但是,您也可以通過提供可選的start參數來為計數器指定不同的起始值,如下面的代碼所示:

for index, item in enumerate(fruits, start=1):
    print(index, item)

輸出將類似於上面的輸出。唯一的區別是索引現在從 1 開始。

Python 枚舉:示例說明

現在您已經掌握了 Python 中 enumerate() 函數的語法。但是,與任何工具一樣,重要的是要知道何時何地使用它。

這就是為什麼我們要在下一節中探索 enumerate() 函數的一些常見用例!

Python 枚舉函數的 5 個用例

Python 中的枚舉函數被廣泛用於可迭代對象的索引和值對程序員都很重要的場景。

我們在下面列出了 Python 中枚舉函數的一些常見用例。

1. 如何使用 Python 列表枚舉

在 Python 中,列表是一種內置數據結構,允許您將多個項目存儲在單個變量中。將列表想像成一個容器,您可以在其中放入不同的項目,並保持它們的順序。

enumerate() 函數可以多種方式用於列表,例如:

A. 使用 Python Enumerate 訪問列表元素及其索引

enumerate() 最常見的用例之一是當您需要訪問列表的元素及其索引時。Enumerate 允許您以乾淨高效的方式執行此操作。

以下是訪問列表元素及其索引的示例:

fruits = ['apple', 'banana', 'mango', 'grape', 'orange']
for index, fruit in enumerate(fruits):
    print(f"At index {index}, the fruit is {fruit}.")

此代碼的輸出如下圖所示:

Python 枚舉:示例說明

B. 使用 Python Enumerate 修改列表元素

當您需要根據索引修改列表的元素時,enumerate() 是一個極好的工具。您可以在循環中訪問索引並使用它來修改列表。

以下是使用枚舉函數修改列表元素的示例:

numbers = [1, 2, 3, 4, 5]

for i, num in enumerate(numbers):
    numbers[i] = num * 2

此 Python 代碼創建一個從 1 到 5 的數字列表。然後,它使用 for 循環和 enumerate() 函數迭代該列表。

對於每次迭代,它將當前數字 (num) 乘以 2,並將其重新分配到列表 (numbers[i]) 中的相同位置。

結果是原始列表中的每個數字都加倍,如下圖所示:

Python 枚舉:示例說明

C. 使用 Python Enumerate 比較兩個列表中的元素

如果您要比較兩個不同列表中的元素, enumerate() 可以提供同時訪問兩個列表中的元素所需的索引。

下面是使用 enumerate 函數比較兩個列表中的元素的示例:

list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 3, 0, 5]
for i, value in enumerate(list1):
    if value != list2[i]:
        print(f"Difference at index {i}: {value} (list1) vs {list2[i]} (list2)")

在這段代碼中,我們首先定義了兩個列表,list1 和 list2。然後,我們使用帶有 enumerate() 的 for 循環遍歷 list1,它提供索引 (i) 和每個項目的值。

如果 list1 中的當前項目與 list2 中的相應項目不匹配,它會打印差異索引和兩個列表中的不同值。

這段代碼的結果如下所示:

Python 枚舉:示例說明

2. 如何使用 Python 元組枚舉

Python 中的元組是元素的有序集合,類似於列表。唯一的區別是元組是不可變的,這意味著您不能在創建後更改其內容。

以下是您可以將枚舉與 Python 元組一起使用的一些情況。

A. 使用 Python Enumerate() 在元組中查找元素

在 Python 中處理元組時,您可能經常需要查找某個元素是否存在於元組中。

以下示例代碼演示瞭如何使用枚舉在元組中查找元素:

fruits = ('apple', 'banana', 'mango', 'grape', 'orange')
for i, fruit in enumerate(fruits):
    if fruit == 'mango':
        print(f"'mango' found at position {i}")

此代碼將打印“'mango' found at position 2”,因為 'mango' 在元組中的索引為 2。

Python 枚舉:示例說明

B. 使用 Python Enumerate() 從元組創建字典

如果您有一個元組並且需要將其轉換為字典,Python 的 enumerate() 函數可能是您的首選工具。

示例代碼顯示瞭如何使用枚舉從元組創建字典:

fruits = ('apple', 'banana', 'mango', 'grape', 'orange')

fruit_dict = {i: fruit for i, fruit in enumerate(fruits)}
print(fruit_dict)

此代碼將打印一個字典,其中鍵是索引,值是元組中的元素。

Python 枚舉:示例說明

3. 如何在 Python 字典中使用 Enumerate

在 Python 中,字典是一個可變的、無序的鍵值對集合,其中每個鍵都必須是唯一的。將其視為現實生活中的字典:您查找一個詞(鍵)並獲得其定義(值)。

以下是您可以將枚舉與 Python 字典一起使用的一些情況:

A. 遍歷字典的鍵和值

您可以使用 enumerate() 函數循環遍歷字典的鍵和值。

enumerate() 函數向可迭代對象(如字典)添加一個計數器,允許您訪問當前索引值。

下面給出了使用 Python 字典枚舉函數的示例

example_dict = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
for i, k in enumerate(example_dict):
    print(i, k)

在這段 Python 代碼中,我們首先創建一個名為 example_dict 的字典。然後,我們使用 enumerate() 函數迭代字典。

對於每次迭代,我們打印循環計數(由 i 給出並從 0 開始)和字典中的當前鍵(k)。

Python 枚舉:示例說明

B. 結合 Python Enumerate 和 Items 函數

您還可以通過items() 函數enumerate()訪問字典的鍵和值。items ()函數返回一個可迭代的鍵值對集合作為元組。

下面的示例演示瞭如何將items()函數與enumerate()一起使用:

example_dict = {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
for i, (k, v) in enumerate(example_dict.items()):
    print(i, k, v)

在這段代碼中,我們創建了一個名為example_dict的字典,然後我們使用 enumerate() 函數迭代字典的鍵值對。在每次迭代期間,我們打印循環索引“i”、當前鍵“k”及其對應的值“v”。

Python 枚舉:示例說明

您現在已經對如何在一些常見場景中使用 Python 的 enumerate() 函數有了深入的了解。但是 enumerate() 可以提供更多。

讓我們在下一節深入探討一些圍繞 enumerate() 的高級用例!

Python Enumerate 的 3 個高級用例

在本節中,我們將超越基礎知識,探索 Python 中枚舉函數的一些高級用例。

我們將涵蓋以下用例:

  1. 將枚舉與 Python 類一起使用

  2. 將枚舉與枚舉類一起使用

  3. 使用枚舉進行訂單反轉

讓我們開始吧!

1. 對 Python 類使用枚舉

在您的 Python 編程之旅中,您可能會遇到需要將枚舉與自定義類一起使用的情況。

為此,您的類應該實現iter()方法,這使其可以迭代。

考慮一個Color類,它存儲顏色名稱及其相關的十六進制值:

class Color:
    def __init__(self, colors: dict):
        self.colors = colors

    def __iter__(self):
        return iter(self.colors.items())

colors = Color({"red": "#FF0000", "green": "#00FF00", "blue": "#0000FF"})

for index, (name, hex_value) in enumerate(colors):
    print(f"{index}: {name} => {hex_value}")

在此代碼中,我們創建了一個 Color 類,它採用顏色名稱及其對應的十六進制值的字典。

當您在循環中使用 enumerate() 時,它會提供索引以及每個鍵值對。這允許您在格式化字符串中打印索引、顏色名稱及其十六進制值。

Python 枚舉:示例說明

2. 將 Python Enumerate 與枚舉類一起使用

Python 帶有一個內置的Enum類,它允許您創建具有自動分配的整數值的枚舉類型。

例如,看看下面的代碼:

from enum import Enum, auto

class Direction(Enum):
    NORTH = auto()
    EAST = auto()
    SOUTH = auto()
    WEST = auto()

for index, direction in enumerate(Direction):
    print(f"{index}: {direction.name} => {direction.value}")

在此腳本中,我們使用 Python 的枚舉模塊定義了一個包含四個成員(NORTH、EAST、SOUTH 和 WEST)的枚舉方向。auto() 函數為每個成員分配一個自動值。

當您在循環中使用 enumerate() 時,它會為每個枚舉成員提供一個索引。這使您可以在格式化字符串中打印出索引、成員名稱及其自動分配的值。

此代碼的輸出如下圖所示:

Python 枚舉:示例說明

3. 使用 Python Enumerate 進行訂單反轉

在某些情況下,您可能希望以相反的順序枚舉項目。您可以通過結合使用reversed()內置函數和enumerate()來實現這一點。

以下示例演示了以相反順序枚舉項目:

my_list = ["apple", "banana", "cherry"]

for index, item in enumerate(reversed(my_list)):
    print(f"{index}: {item}")

在這段代碼中,我們使用 enumerate() 迭代 my_list 的反向版本。這會在每次迭代中為您提供反向列表中的索引和項目。它允許您在格式化字符串中打印索引和項目。

Python 枚舉:示例說明

reversed ()函數不會修改原來的序列;它創建一個新的迭代器,以相反的順序顯示項目。

要了解有關 Python 中的函數的更多信息,請觀看以下視頻:

最後的想法

當您繼續 Python 之旅時,必須掌握 enumerate() 函數。它是一種增強代碼可讀性和效率的工具。

通過使用 enumerate(),您可以在循環中無縫訪問索引和值,從而減少對計數器變量或索引的需要。它簡化了您的代碼並使其更像 Pythonic。

無論您是遍歷列表、元組、字符串還是字典,enumerate() 都將被證明是一個有價值的工具。通過理解和練習 enumerate(),您將在磨練 Python 編程技能方面邁出重要的一步!


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的