What's the cleanest way to set up an enumeration in Python?
本问题已经有最佳答案,请猛点这里访问。
我对python比较陌生,我想找出创建枚举的最简单方法。
我找到的最好的东西是:
1 | (APPLE, BANANA, WALRUS) = range(3) |
将苹果设为0,香蕉设为1等。
但我想知道有没有更简单的方法。
在python3.4(docs)中添加了枚举。详见PEP 0435。
如果您在python2.x上,那么pypi上就存在一个backport。
1 | pip install enum34 |
您的使用示例与Python枚举的函数式API最相似:
1 2 3 4 | >>> from enum import Enum >>> MyEnum = Enum('MyEnum', 'APPLE BANANA WALRUS') >>> MyEnum.BANANA <MyEnum.BANANA: 2> |
但是,这是一个更典型的用法示例:
1 2 3 4 | class MyEnum(Enum): apple = 1 banana = 2 walrus = 3 |
如果需要枚举实例与整数进行相等比较,也可以使用
你可以用这个。虽然稍长,但可读性和灵活性更高。
1 2 3 4 5 | from enum import Enum class Fruits(Enum): APPLE = 1 BANANA = 2 WALRUS = 3 |
编辑:python 3.4
使用枚举
1 2 | In [4]: list(enumerate(('APPLE', 'BANANA', 'WALRUS'),1)) Out[4]: [(1, 'APPLE'), (2, 'BANANA'), (3, 'WALRUS')] |
努布的回答应该是这样的
1 2 3 | In [13]: from enum import Enum In [14]: Fruit=Enum('Fruit', 'APPLE BANANA WALRUS') |
枚举值与整数不同。
1 2 3 4 5 6 7 8 | 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> |
在你的问题中,使用范围是一个更好的选择。
1 | In [18]: APPLE,BANANA,WALRUS=range(1,4) |
您也可以使用dict:
1 2 3 4 5 | d = { 1: 'APPLE', 2: 'BANANA', 3: 'WALRUS' } |
1 | a = ('APPLE', 'BANANA', 'WALRUS') |
可以使用enumerate创建元组列表以获得所需的输出。
1 2 | list(enumerate(a, start=1)) [(1, 'APPLE'), (2, 'BANANA'), (3, 'WALRUS')] |
如果您先需要
1 2 | [(j, i +1 ) for i, j in enumerate(a)] [('APPLE', 1), ('BANANA', 2), ('WALRUS', 3)] |
此外,还可以使用
1 2 | dict(enumerate(a, start=1)) {1: 'APPLE', 2: 'BANANA', 3: 'WALRUS'} |