如何统计字符串中Python Enum枚举值的出现次数
可选实现方案
方案1:使用
StrEnum替代基础Enum(适用于Python 3.11+,且允许调整枚举值存储类型的场景)StrEnum是内置的字符串枚举类,枚举实例本身可直接作为字符串使用,无需额外调用.value再做类型转换:from enum import StrEnum class numbers(StrEnum): one = "1" two = "2" string = "121212123324" # 直接传入枚举实例即可统计 print(string.count(numbers.one)) # 输出结果为4方案2:封装自定义枚举基类(适用于必须保留枚举值为数值类型,不想修改原有枚举取值的场景)
可以提前在基类中封装类型转换和统计逻辑,后续所有继承该基类的枚举都可以直接调用统计方法:from enum import Enum # 自定义可直接统计字符串出现次数的枚举基类 class CountableIntEnum(Enum): @property def str_val(self): return str(self.value) def count_in(self, target_str: str) -> int: return target_str.count(self.str_val) # 原有枚举值不需要做任何修改,仅修改继承的父类即可 class numbers(CountableIntEnum): one = 1 two = 2 string = "121212123324" # 直接调用封装好的统计方法 print(numbers.one.count_in(string)) # 输出结果为4 # 也可单独获取转换后的字符串值做其他操作 print(string.count(numbers.one.str_val))方案3:预生成枚举字符串映射(适用于需要批量统计所有枚举值出现次数的场景)
一次性完成所有枚举值的类型转换,后续统计无需重复转换:from enum import Enum class numbers(Enum): one = 1 two = 2 string = "121212123324" # 预生成枚举实例到对应字符串值的映射 enum_str_map = {member: str(member.value) for member in numbers} # 统计单个枚举值的出现次数 print(string.count(enum_str_map[numbers.one])) # 输出结果为4 # 批量统计所有枚举值的出现次数 count_result = {member.name: string.count(str_val) for member, str_val in enum_str_map.items()} print(count_result) # 输出:{'one': 4, 'two': 5}
内容的提问来源于stack exchange,提问作者user5067291
相关产品推荐
相关产品推荐

