在Python中,建立枚举最简单的方法是什么?

10

我相对于Python比较新,我想知道创建枚举的最简单方法。

我找到的最好方式是:

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

将苹果设为0,香蕉设为1等。

不过我在想是否有更简单的方法。

5个回答

4
你可以使用这个。虽然稍微有点长,但更易读和灵活。
from enum import Enum
class Fruits(Enum):
    APPLE = 1
    BANANA = 2
    WALRUS = 3

编辑:Python 3.4


1
同意这一点。Python 代码风格支持显式编码。 - kmmbvnr
1
只需使用 Enum 初始化器:Fruits = Enum('Fruits', 'APPLE BANANA WALRUS') - jme
如果我们希望有APPLE=654, BANANA = 980等等...? - Utsav T
3
这个API也支持这种方式:Fruits = Enum('Fruits', dict(APPLE=62, BANANA=980))。其中,'Fruits'是枚举类型的名称,而APPLEBANANA是枚举类型中的元素,它们分别对应着整型值62和980。 - jme

4

在Python 3.4中新增了枚举类型(文档)。详细信息请参见PEP 0435

如果您使用的是Python 2.x,则可以在pypi上找到后移版本

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,但我不建议这样做,除非您有充分的理由需要这种行为。


1
使用enumerate
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>

像你的问题一样,使用范围是更好的选择。

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

0
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 请解释一下您投反对票的原因。这样我就可以知道我错过了什么。 - Rahul Gupta

0

你也可以使用字典:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接