最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用enum模塊獲取枚舉成員索引號的四種方法詳解

 更新時間:2026年04月28日 11:18:59   作者:detayun  
在 Python 中,可以使用 enum 模塊創(chuàng)建枚舉類型,并通過遍歷枚舉成員來獲取其索引號,本文介紹了常用的四種方法,大家可以根據(jù)自己的需要進行選擇

在 Python 中,可以使用 enum 模塊創(chuàng)建枚舉類型,并通過遍歷枚舉成員來獲取其索引號(即枚舉值的序號)。以下是詳細(xì)方法和示例:

方法 1:使用enum.Enum和enumerate()

通過 enumerate() 遍歷枚舉成員,同時獲取索引和枚舉值。

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# 遍歷枚舉并獲取索引和值
for index, color in enumerate(Color, start=1):  # start=1 表示索引從1開始(默認(rèn)從0)
    print(f"Index: {index}, Name: {color.name}, Value: {color.value}")

輸出:

Index: 1, Name: RED, Value: 1
Index: 2, Name: GREEN, Value: 2
Index: 3, Name: BLUE, Value: 3

方法 2:直接通過枚舉成員的name和value屬性

如果不需要顯式遍歷索引,可以直接訪問枚舉成員的屬性:

for color in Color:
    print(f"Name: {color.name}, Value: {color.value}")

輸出

Name: RED, Value: 1
Name: GREEN, Value: 2
Name: BLUE, Value: 3

方法 3:獲取枚舉成員的序號(基于定義順序)

如果需要枚舉成員的定義順序序號(從 0 開始),可以通過 list(Enum).index(member) 實現(xiàn):

for color in Color:
    index = list(Color).index(color)  # 獲取定義順序的索引(從0開始)
    print(f"Order Index: {index}, Name: {color.name}, Value: {color.value}")

輸出:

Order Index: 0, Name: RED, Value: 1
Order Index: 1, Name: GREEN, Value: 2
Order Index: 2, Name: BLUE, Value: 3

方法 4:使用__members__屬性

通過 __members__ 訪問枚舉的名稱到成員的映射,再結(jié)合 enumerate()

for i, name in enumerate(Color.__members__, start=1):
    color = Color[name]
    print(f"Index: {i}, Name: {name}, Value: {color.value}")

輸出

Index: 1, Name: RED, Value: 1
Index: 2, Name: GREEN, Value: 2
Index: 3, Name: BLUE, Value: 3

知識擴展

在 Python 的 enum 模塊中,枚舉成員本身并不直接提供“索引”屬性,但我們可以利用枚舉類的內(nèi)部順序或成員的值來獲得索引。常見的獲取索引的方法有以下四種,具體使用哪種取決于你的枚舉定義方式(是否有自定義值)。

1. 利用 list() 轉(zhuǎn)換枚舉類 + index() 方法

枚舉類的 __members__ 保留成員定義順序,可以通過將其轉(zhuǎn)換為列表,再使用 index() 方法獲取成員的位置(從 0 開始)。

from enum import Enum
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
members = list(Color)
idx = members.index(Color.GREEN)
print(idx)  # 輸出 1

優(yōu)點:不依賴成員的具體值,只要定義順序不變即可。

注意:索引從 0 開始,若希望從 1 開始,加 1 即可。

2. 使用 _member_names_ 屬性獲取名稱列表

枚舉類內(nèi)置了 _member_names_ 屬性,它是一個按定義順序排列的成員名稱列表??梢酝ㄟ^成員名來定位索引。

names = Color._member_names_
idx = names.index(Color.GREEN.name)
print(idx)  # 輸出 1

說明_member_names_ 是 Python 3.11+ 公開的但并非“官方推薦”的 API,在舊版本中也可用(但內(nèi)部屬性)。它的用途明確,不過在實際項目中更推薦使用第一種方式。

3. 使用 __members__ 有序字典

__members__ 是一個保留定義順序的映射(Python 3.6+ 字典有序)??梢酝ㄟ^將其值轉(zhuǎn)換為列表來獲得索引。

members_list = list(Color.__members__.values())
idx = members_list.index(Color.BLUE)
print(idx)  # 輸出 2

優(yōu)點:直接利用標(biāo)準(zhǔn)屬性,不依賴內(nèi)部名稱列表。

與第一種方法的區(qū)別:第一種本質(zhì)也是 list(Color),它會自動調(diào)用 __members__.values() 的轉(zhuǎn)換。

4. 借助 IntEnum 將索引作為成員值

如果希望索引等于成員的值,可以使用 enum.IntEnum(或 enum.Enum 配合 auto()),讓枚舉值自動從 1 遞增,那么成員的值本身就是索引(從 1 開始)。

from enum import IntEnum, auto
class Color(IntEnum):
    RED = auto()   # 1
    GREEN = auto() # 2
    BLUE = auto()  # 3
print(Color.GREEN.value)   # 2(索引)

特點:此時成員的值嚴(yán)格等于定義順序(索引)。但要注意 IntEnum 的所有成員可以直接與整數(shù)比較,可能會有副作用。如果不希望這種比較特性,可以只用 Enum + auto() 但通過 value 獲取索引。

對比總結(jié)

方法依賴枚舉定義順序是否需要自定義值索引起點
list(Enum) 索引任意0
_member_names_ 索引任意0
__members__ 索引任意0
IntEnum + auto()自動1(等于 value)

推薦:大多數(shù)情況下使用第一種方法 list(Color).index(member) 最簡潔、最符合 Python 習(xí)慣,且不依賴于內(nèi)部私有屬性。如果你的枚舉成員值需要恰好就是其順序(例如數(shù)據(jù)庫序號),那么第四種方法更適合。

總結(jié)

  • 索引需求:如果需要自定義索引(如從 1 開始),用 enumerate(Enum, start=1)。
  • 定義順序序號:用 list(Enum).index(member) 獲取 0 開始的序號。
  • 直接訪問屬性:枚舉成員的 namevalue 是最常用的屬性。

根據(jù)需求選擇合適的方法即可!

到此這篇關(guān)于Python使用enum模塊獲取枚舉成員索引號的四種方法詳解的文章就介紹到這了,更多相關(guān)Python獲取枚舉成員索引號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python pipeline的用法及避坑點

    python pipeline的用法及避坑點

    在本篇文章里小編給大家分享的是一篇關(guān)于python pipeline的用法及避坑點,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-07-07
  • Pytorch實現(xiàn)各種2d卷積示例

    Pytorch實現(xiàn)各種2d卷積示例

    今天小編就為大家分享一篇Pytorch實現(xiàn)各種2d卷積示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python變量命名的7條建議

    python變量命名的7條建議

    這篇文章主要介紹了python變量命名的7條建議,如何給變量命名,如何讓它變得有意義成了程序員不可逾越的難題,需要的朋友可以參考下
    2019-07-07
  • Python學(xué)習(xí)筆記之錯誤和異常及訪問錯誤消息詳解

    Python學(xué)習(xí)筆記之錯誤和異常及訪問錯誤消息詳解

    這篇文章主要介紹了Python學(xué)習(xí)筆記之錯誤和異常及訪問錯誤消息,結(jié)合實例形式分析了Python錯誤和異常及訪問錯誤消息try...except語句相關(guān)使用技巧,需要的朋友可以參考下
    2019-08-08
  • 如何讀取.npy文件以及如何實現(xiàn)將數(shù)組保存為圖片

    如何讀取.npy文件以及如何實現(xiàn)將數(shù)組保存為圖片

    這篇文章主要介紹了如何讀取.npy文件以及如何實現(xiàn)將數(shù)組保存為圖片問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式

    keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式

    這篇文章主要介紹了keras小技巧——獲取某一個網(wǎng)絡(luò)層的輸出方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python接口自動化淺析數(shù)據(jù)驅(qū)動原理

    Python接口自動化淺析數(shù)據(jù)驅(qū)動原理

    這篇文章主要介紹了Python接口自動化淺析數(shù)據(jù)驅(qū)動原理,文中會詳細(xì)描述怎樣使用openpyxl模塊操作excel及結(jié)合ddt來實現(xiàn)數(shù)據(jù)驅(qū)動,有需要的朋友可以參考下
    2021-08-08
  • 一個可以套路別人的python小程序?qū)嵗a

    一個可以套路別人的python小程序?qū)嵗a

    本文通過一段實例代碼給大家分享一個可以套路別人的python小程序,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • python刪除指定列或多列單個或多個內(nèi)容實例

    python刪除指定列或多列單個或多個內(nèi)容實例

    這篇文章主要介紹了python刪除指定列或多列單個或多個內(nèi)容實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python新手必讀bytearray對象使用技巧掌握

    Python新手必讀bytearray對象使用技巧掌握

    Python中的bytearray是一個可變序列,通常用于存儲二進制數(shù)據(jù),它允許在不創(chuàng)建新的對象的情況下就地修改數(shù)據(jù),非常適用于處理字節(jié)數(shù)據(jù),本文將深入學(xué)習(xí)bytearray對象的使用,包括創(chuàng)建、修改、切片和常見應(yīng)用場景
    2023-12-12

最新評論

梧州市| 阿克苏市| 蒙城县| 凤阳县| 左云县| 绥德县| 灵宝市| 竹北市| 宜城市| 古田县| 延安市| 巧家县| 锡林浩特市| 玉环县| 连州市| 若羌县| 仁化县| 应城市| 大足县| 新河县| 通河县| 新建县| 榕江县| 勐海县| 灌南县| 桦川县| 怀宁县| 开封县| 冕宁县| 遵义市| 饶平县| 南漳县| 黄山市| 汪清县| 铁力市| 准格尔旗| 宜兴市| 林西县| 沁水县| 伊通| 博爱县|