[英]Choosing an integer at random among the indices of a given list
在 Python 3.x 中,我需要在给定列表的索引中随机选择一个整数。 换句话说,给定
mylist = [0, 5, 6, 8, -10]
我想返回一个介于 0 和 4 之间的数字。最 Pythonic 的方法是什么? 我试过
import numpy as np
my_list = [0, 5, 6, 8, -10]
def choose_at_random(a_list):
choice = np.random.randint(0, len(a_list))
return choice
这有效,但这是 Pythonic 的方式吗?
如果您只想使用 Python 标准库中的某些内容(并且不需要像numpy
这样的矢量化内容), randrange
通常是实现此目的的最简单方法。
你会像这样使用它:
from random import randrange
from typing import Sized
def random_index_from_sized(a_list: Sized) -> int:
return randrange(len(a_list))
my_list = [0, 5, 6, 8, -10]
random_index_from_sized(my_list)
这将返回 [0, 4] 中的整数值。
numpy
的randint
也有类似的定义,所以可以在上面的定义中使用:
from numpy.random import randint
def random_sized_index(a_list: Sized) -> int:
return randint(len(a_list))
从numpy
返回单个值是毫无意义的,即numpy
是为返回大数组而设计的。 一个快速的timeit
测试表明randrange(5)
需要 ~0.3µs 而randint(5)
需要 ~2µs(对于单个值)。 如果你想要,例如,1000 个值,那么[randrange(5) for _ in range(1000)]
需要 ~300µs,而randint(5, size=1000)
只需要 ~20µs。
import random
#random is in the standard library(so no need to "pip")
my_list = [0, 5, 6, 8, -10]
def choose_at_random(a_list):
choice = (random.choice(a_list))
return choice
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.