简体   繁体   English

枚举上的 random.choice

[英]random.choice on Enum

I would like to use random.choice on an Enum .我想在Enum上使用random.choice

I tried:我试过:

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

But this code fails with a KeyError .但是此代码失败并显示KeyError How can I choose a random member of Enum ?如何选择Enum的随机成员?

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) .一个Enum不是一个序列,所以你不能将它传递给random.choice() ,它试图在 0 和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 .像字典一样,对Enum索引访问期望传入枚举名称,因此Foo[<integer>]在这里失败并出现KeyError

You can cast it to a list first:您可以先将其转换为列表:

bar = random.choice(list(Foo))

This works because Enum does support iteration .这是有效的,因为Enum确实支持迭代

Demo:演示:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM