• python枚举


    1.什么是枚举

    在python中枚举是一种类(Enum,IntEnum),存放在enum模块中。枚举类型可以给一组标签赋予一组特定的值。

    枚举的特点

    枚举的特点:

    1. 枚举类中不能存在相同的标签名
    2. 枚举是可迭代的
    3. 不同的枚举标签可以对应相同的值,但它们都会被视为该值对应第一个标签的别名
    4. 如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
    5. 枚举成员之间不能进行大小比较,可进行等值和同一性比较
    6. 枚举成员为单例,不可实例化,不可更改

    在开始前,我们先定义一个枚举类:

    from enum import Enum
    
    
    class Week(Enum):
        MONDAY = 0
        TUESDAY = 1
        WEDNESDAY = 2
        THURSDAY = 3
        FRIDAY = 4
        SATURDAY = 5
        SUNDAY = 6
    

    获取在枚举类中定义的枚举成员

    # 方法一:
    print(Week.MONDAY)
    print(type(Week.MONDAY))
    # 方法二
    print(Week['TUESDAY'])
    print(type(Week.TUESDAY))
    # 方法三
    print(Week(2))
    print(type(Week(2)))
    -------------------------------------------
    Week.MONDAY
    <enum 'Week'>
    Week.TUESDAY
    <enum 'Week'>
    Week.WEDNESDAY
    <enum 'Week'>
    

    枚举成员中包含标签名和该标签对应的值

    today = Week.FRIDAY
    print('Today is ' + today.name + '. The number of today is ' + str(today.value))
    ---------------------------------------------------
    Today is FRIDAY. The number of today is 4
    

    包含相同值的枚举类的迭代,默认情况下不会输出别名,但可通过迭代__members__来显示所有成员标签

    from enum import Enum
    
    
    class Week(Enum):
        MONDAY = 0
        TUESDAY = 1
        FRIDAY = 4
        TODAY = 4  # 以FRIDAY别名的形式存在
    
    
    for day in Week:
        print(day)
    print('******************')
    for day in Week.__members__:
        print(day)
    
    Week.MONDAY
    Week.TUESDAY
    Week.FRIDAY
    ******************
    MONDAY
    TUESDAY
    FRIDAY
    TODAY
    

    限定不含相同值的枚举类@unique

    from enum import Enum, unique
    
    
    @unique
    class Week(Enum):
        MONDAY = 0
        TUESDAY = 1
        FRIDAY = 4
        TODAY = 4  # 以FRIDAY别名的形式存在
    
    # ValueError: duplicate values found in <enum 'Week'>: TODAY -> FRIDAY
    

    3.python的内置函数enumerate()

    enumerate()是python使用的内置函数,用于简化程序员执行的任务。在enumerate()的帮助下,我们可以迭代许多不同类型的对象,如字符串,元组,列表等。更有用的是它接受一个可选参数,该参数告诉枚举从哪里开始索引。此外,使用列表,可以创建包含索引和列表的元组。

    enu_list = ['Python', 'Java', 'C']
    # 枚举 一个是索引号 一个是值
    for i, item in enumerate(enu_list):
        print(i)
        print(item)
    
    print(list(enumerate(enu_list, 1)))  # 从1开始索引,默认为0
    
    
    # 0
    # Python
    # 1
    # Java
    # 2
    # C
    # [(1, 'Python'), (2, 'Java'), (3, 'C')]
    

    3.1.结合列表生成式

    # print([index for index, item in enumerate([3, 5, 7, 3, 7])])
    # print([item for index, item in enumerate({'name':'dahai','age':18})])
    #
    # for index, item in enumerate({'name':'dahai','age':18}):
    #     print(index,item)
    # 被3整除的列表数据  获得是对应的索引
    print([index for index, item in enumerate([3, 5, 7, 3, 7]) if item % 3==0])
    # 被2整除的列表索引  获得是对应的索引
    print([index for index, item in enumerate([3, 5, 7, 3, 7]) if index % 2==0])
    # 被3整除的列表数据  获得是对应的数据
    print([item for index, item in enumerate([3, 5, 7, 3, 7]) if item % 3==0])
    

    3.2.结合字典生成式

    # 字典生成式
    print({index:item for index, item in enumerate([3, 5, 7, 3, 7])})
    print({str(index):item for index, item in enumerate([3, 5, 7, 3, 7])})
    # 被2整除的列表索引  获得是对应的索引和列表数据组合的键值对字典
    print({str(index):item for index, item in enumerate([3, 5, 7, 3, 7]) if index % 2==0})
    # 被3整除的列表数据  获得是对应的索引和列表数据组合的键值对字典
    print({str(index):item for index, item in enumerate([3, 5, 7, 3, 7]) if item % 3==0})
    
  • 相关阅读:
    python学习第18天----属性、类方法、静态方法
    面试总结
    JAVA面试题整理
    Docker-基础
    Shell
    MYSQL
    logstash的使用(ELK)
    (ELK)FileBeat的使用
    Zookeeper的介绍和单机、集群搭建
    Elaticsearch7.7.0的安装(ELK)
  • 原文地址:https://www.cnblogs.com/feng0815/p/16490986.html
Copyright © 2020-2023  润新知