什么';在Python中设置枚举最干净的方法是什么?

什么';在Python中设置枚举最干净的方法是什么?,python,enums,enumeration,Python,Enums,Enumeration,我对Python比较陌生,我对找到创建枚举的最简单方法很感兴趣 我发现最好的是: (APPLE, BANANA, WALRUS) = range(3) 这将苹果设置为0,香蕉设置为1,等等 但我想知道是否有更简单的方法。使用枚举 In [4]: list(enumerate(('APPLE', 'BANANA', 'WALRUS'),1)) Out[4]: [(1, 'APPLE'), (2, 'BANANA'), (3, 'WALRUS')] noob的答案应该是这样的 In [13]:

我对Python比较陌生,我对找到创建枚举的最简单方法很感兴趣

我发现最好的是:

(APPLE, BANANA, WALRUS) = range(3)
这将苹果设置为0,香蕉设置为1,等等

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

使用枚举

In [4]: list(enumerate(('APPLE', 'BANANA', 'WALRUS'),1))
Out[4]: [(1, 'APPLE'), (2, 'BANANA'), (3, 'WALRUS')]
noob的答案应该是这样的

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>
可以使用enumerate创建元组列表以获得所需的输出

list(enumerate(a, start=1))
[(1, 'APPLE'), (2, 'BANANA'), (3, 'WALRUS')]
dict(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)]
此外,您还可以使用
枚举
创建字典以获得所需的输出

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

你可以用这个。虽然篇幅稍长,但可读性和灵活性更高

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

编辑:Python 3.4

您也可以使用dict:

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

枚举是在Python3.4()中添加的。有关详细信息,请参阅

如果您使用的是Python2.x,那么pypi上就存在一个问题

pip install enum34
您的使用示例与python enum的函数API最为相似:

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

如果需要枚举实例将equal与integer进行比较,也可以使用
IntEnum
,但我不建议这样做,除非有充分的理由需要这种行为

我同意这一点。Python codestyle支持显式编码。只需使用
Enum
初始值设定项:
Fruits=Enum('Fruits','APPLE BANANA WALRUS')
。如果我们希望有
APPLE=654,BANANA=980
等等。@Noob API也支持:
Fruits=Enum('Fruits',dict(APPLE=62,BANANA=980))
@downvoter请解释否决投票的原因。这样我就能知道我错过了什么。
class MyEnum(Enum):
    apple = 1
    banana = 2
    walrus = 3