如何高效获取Python字符串Enum类中成员的索引?
高效获取Python Enum成员的索引
给定如下Enum类:
from enum import Enum class Animals(Enum): Dog= 'dog' Cat= 'cat' Chicken = 'chicken' Horse = 'horse'
当前使用list(Animals).index(Animals.Chicken)获取索引(结果为2),但该方法需要将枚举转换为列表后遍历查找,效率偏低,且无法修改Enum类本身,以下是两种更优方案:
方案1:预构建成员-索引映射字典(最优,O(1)查询)
利用enumerate按枚举定义顺序生成成员与索引的映射,仅需初始化一次,后续查询均为常数时间:
# 初始化一次,全局复用 animal_index_map = {member: idx for idx, member in enumerate(Animals)} # 查询示例 print(animal_index_map[Animals.Chicken]) # 输出:2
该方式适合频繁查询的场景,完全规避了列表遍历的开销。
方案2:利用Enum内置的_member_names_属性
Enum类自带_member_names_属性,存储了成员名称的有序列表(与定义顺序一致),可通过成员的name属性快速定位索引:
print(Animals._member_names_.index(Animals.Chicken.name)) # 输出:2
这种方式无需额外维护字典,但本质仍是列表查找(时间复杂度O(n)),适合偶尔查询的场景,比直接转换成员列表略高效。
内容的提问来源于stack exchange,提问作者Gilad Raz
相关产品推荐
相关产品推荐

