【问题标题】:random.choice on Enum枚举上的随机选择
【发布时间】:2014-08-06 06:24:18
【问题描述】:

我想在Enum 上使用random.choice

我试过了:

class Foo(Enum):
    a = 0
    b = 1
    c = 2
bar = random.choice(Foo)

但此代码失败并显示KeyError。如何随机选择Enum的成员?

【问题讨论】:

标签: python random enums


【解决方案1】:

Enum 不是一个序列,因此您不能将它传递给random.choice(),它会尝试选择介于 0 和 len(Foo) 之间的索引。像字典一样,对Enum 的索引访问需要传入枚举names,因此Foo[<integer>] 在此处失败并返回KeyError

您可以先将其转换为列表:

bar = random.choice(list(Foo))

这是因为Enum does support iteration

演示:

>>> from enum import Enum
>>> import random
>>> class Foo(Enum):
...     a = 0
...     b = 1
...     c = 2
... 
>>> random.choice(list(Foo))
<Foo.a: 0>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2018-07-07
    • 2020-09-10
    • 2013-10-20
    • 1970-01-01
    相关资源
    最近更新 更多