在 Python 中设置枚举的最简洁方法是什么?
What's the cleanest way to set up an enumeration in Python?
我对 Python 比较陌生,我有兴趣找出创建枚举的最简单方法。
我发现的最好的是这样的:
(APPLE, BANANA, WALRUS) = range(3)
将 APPLE 设置为 0,将 BANANA 设置为 1,等等
但我想知道是否有更简单的方法。
使用枚举
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>
在你的问题中,使用 range 是更好的选择。
In [18]: APPLE,BANANA,WALRUS=range(1,4)
a = ('APPLE', 'BANANA', 'WALRUS')
您可以使用枚举创建元组列表以获得所需的输出。
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'}
你可以用这个。虽然稍长一些,但更具可读性和灵活性。
from enum import Enum
class Fruits(Enum):
APPLE = 1
BANANA = 2
WALRUS = 3
编辑:Python3.4
你也可以使用 dict:
d = {
1: 'APPLE',
2: 'BANANA',
3: 'WALRUS'
}
在 python 3.4 中添加了枚举(docs). See 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
,但我不推荐这样做,除非您有充分的理由需要这种行为。
我对 Python 比较陌生,我有兴趣找出创建枚举的最简单方法。
我发现的最好的是这样的:
(APPLE, BANANA, WALRUS) = range(3)
将 APPLE 设置为 0,将 BANANA 设置为 1,等等
但我想知道是否有更简单的方法。
使用枚举
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>
在你的问题中,使用 range 是更好的选择。
In [18]: APPLE,BANANA,WALRUS=range(1,4)
a = ('APPLE', 'BANANA', 'WALRUS')
您可以使用枚举创建元组列表以获得所需的输出。
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'}
你可以用这个。虽然稍长一些,但更具可读性和灵活性。
from enum import Enum
class Fruits(Enum):
APPLE = 1
BANANA = 2
WALRUS = 3
编辑:Python3.4
你也可以使用 dict:
d = {
1: 'APPLE',
2: 'BANANA',
3: 'WALRUS'
}
在 python 3.4 中添加了枚举(docs). See 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
,但我不推荐这样做,除非您有充分的理由需要这种行为。