枚举上的random.choice [英] random.choice on Enum

查看:129
本文介绍了枚举上的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆