枚举上的random.choice [英] random.choice on Enum
本文介绍了枚举上的random.choice的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在Enum
上使用random.choice
.
我尝试过:
class Foo(Enum):
a = 0
b = 1
c = 2
bar = random.choice(Foo)
但是此代码以KeyError
失败.如何选择Enum
的随机成员?
But this code fails with a KeyError
. How can I choose a random member of Enum
?
推荐答案
Enum
不是序列,因此您无法将其传递给random.choice()
,后者试图在两者之间选择索引0和len(Foo)
.像字典一样,对Enum
的索引访问反而希望传入枚举 names ,因此Foo[<integer>]
在此处失败,并带有KeyError
.
An Enum
is not a sequence, so you cannot pass it to random.choice()
, which tries to pick an index between 0 and len(Foo)
. Like a dictionary, index access to an Enum
instead expects enumeration names to be passed in, so Foo[<integer>]
fails here with a KeyError
.
您可以先将其投射到列表中:
You can cast it to a list first:
bar = random.choice(list(Foo))
之所以可行,是因为Enum
确实支持迭代.
This works because 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>
这篇关于枚举上的random.choice的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文