【问题标题】:What's the cleanest way to set up an enumeration in Python? [duplicate]在 Python 中设置枚举的最简洁方法是什么? [复制]
【发布时间】:2015-08-29 20:31:53
【问题描述】:

我对 Python 比较陌生,我有兴趣找出创建枚举的最简单方法。

我发现的最好的是:

(APPLE, BANANA, WALRUS) = range(3)

将 APPLE 设置为 0,将 BANANA 设置为 1,等等。

但我想知道是否有更简单的方法。

【问题讨论】:

    标签: python enums enumeration


    【解决方案1】:

    在 python 3.4 (docs) 中添加了枚举。有关详细信息,请参阅PEP 0435

    如果你在 python 2.x 上,pypi 上有一个backport

    pip install enum34
    

    您的使用示例与 python 枚举的函数式 API 最相似:

    >>> from enum import Enum
    >>> MyEnum = Enum('MyEnum', 'APPLE BANANA WALRUS')
    >>> MyEnum.BANANA
    <MyEnum.BANANA: 2>
    

    不过,这是一个比较典型的用法示例:

    class MyEnum(Enum):
        apple = 1
        banana = 2
        walrus = 3
    

    如果您需要枚举实例与整数比较相等,您也可以使用IntEnum,但我不建议这样做,除非您有充分的理由需要这种行为。

    【讨论】:

      【解决方案2】:

      你可以使用它。虽然稍长,但更具可读性和灵活性。

      from enum import Enum
      class Fruits(Enum):
          APPLE = 1
          BANANA = 2
          WALRUS = 3
      

      编辑:Python 3.4

      【讨论】:

      • 同意这一点。 Python codestyle 支持显式编码。
      • 只需使用 Enum 初始化器:Fruits = Enum('Fruits', 'APPLE BANANA WALRUS')
      • 如果我们希望有APPLE=654, BANANA = 980等等..?
      • @Noob API 也支持:Fruits = Enum('Fruits', dict(APPLE=62, BANANA=980))
      【解决方案3】:

      使用枚举

      In [4]: list(enumerate(('APPLE', 'BANANA', 'WALRUS'),1))
      Out[4]: [(1, 'APPLE'), (2, 'BANANA'), (3, 'WALRUS')]
      

      菜鸟的回答应该是这样的

      In [13]: from enum import Enum
      
      In [14]: Fruit=Enum('Fruit', 'APPLE BANANA WALRUS')
      

      枚举值不同于整数。

      In [15]: Fruit.APPLE
      Out[15]: <Fruit.APPLE: 1>
      
      In [16]: Fruit.BANANA
      Out[16]: <Fruit.BANANA: 2>
      
      In [17]: Fruit.WALRUS
      Out[17]: <Fruit.WALRUS: 3>
      

      在您的问题中,使用范围是一个更好的选择。

      In [18]: APPLE,BANANA,WALRUS=range(1,4)
      

      【讨论】:

        【解决方案4】:

        你也可以使用字典:

        d = {
            1: 'APPLE',
            2: 'BANANA',
            3: 'WALRUS'
        }
        

        【讨论】:

          【解决方案5】:
          a = ('APPLE', 'BANANA', 'WALRUS')
          

          您可以使用 enumerate 创建一个元组列表以获得所需的输出。

          list(enumerate(a, start=1))
          [(1, 'APPLE'), (2, 'BANANA'), (3, 'WALRUS')]
          

          如果您先需要'APPLE',然后需要1,则可以执行以下操作:

          [(j, i +1 ) for i, j in enumerate(a)]
          [('APPLE', 1), ('BANANA', 2), ('WALRUS', 3)]
          

          此外,您可以使用enumerate 创建字典以获得所需的输出。

          dict(enumerate(a, start=1))
          {1: 'APPLE', 2: 'BANANA', 3: 'WALRUS'}
          

          【讨论】:

          • @downvoter 请解释拒绝投票的原因。这样我就可以知道我错过了什么。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-09
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 2017-12-25
          • 2018-08-10
          • 1970-01-01
          相关资源
          最近更新 更多