繁体   English   中英

在给定列表的索引中随机选择一个整数

[英]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] 中的整数值。

numpyrandint也有类似的定义,所以可以在上面的定义中使用:

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.

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