在 Python 中设置枚举的最简洁方法是啥? [复制]

Posted

技术标签:

【中文标题】在 Python 中设置枚举的最简洁方法是啥? [复制]【英文标题】: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,等等。

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

【问题讨论】:

【参考方案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 请解释拒绝投票的原因。这样我就可以知道我错过了什么。

以上是关于在 Python 中设置枚举的最简洁方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中设置自定义 NavigationBar 的最简单方法是啥?

检查环境变量是不是在 Unix shell 脚本中设置的简洁方法是啥?

在javascript中设置默认参数值的最有效方法是啥?

在 Python 列表上进行排序加 uniq 的最简洁方法是啥?

在 Python 中设置配置文件的最佳方法是啥

使用 SWIG 包装对象从 C++ 调用 Python 函数的最简洁方法是啥