You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计字符串中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:36:02