生成带有替换的随机整数列表的最佳方法

Best way to generate list of random integers with replacement

我能够生成一个随机整数列表,并使用 for 循环进行替换,但它看起来很冗长,必须有一种更优雅的方法来使用纯 python 或使用 random 没有循环。是否有更优化的解决方案可以产生下面的结果 rand_list 而无需在每个循环中附加?

import random

rand_list = [] 

for x in range(100):

    r = random.choice([1,2,3,4,5])
    rand_list.append(r)

您可以使用 comprehension

rand_list = [(random.randrange(5) + 1) for x in range(100)]

如果您有更重的函数(可能是复杂的散列或 return 非常大的值),您可以使用生成器延迟创建值。这可以节省内存并允许在创建整个列表之前进行处理。您可以在计算值后中断,或者 如果只需要一定数量(而不是连续过程)。

import itertools
import random

def gen():
    while True:
        yield random.randrange(5) + 1

max_iterations = 100

for value in itertools.islice(gen(), max_iterations):
    do_some_opertation(value)

我相信您需要使用随机包中的函数 choices,您只是漏掉了“s”!此外,您需要添加 k 参数来说明您要采样多少个值:

values = [1,2,3,4,5]
print(random.choices(values,k=10))

输出:

[2, 1, 4, 2, 2, 4, 1, 2, 1, 4]

在您的示例中,您需要将 k 固定为 100。

random.choices 正是您所需要的:

from random import choices

rand_list = choices(range(1, 6), k=100)

使用random.choices:

from random import choices

rand_list = choices(range(1,6),k=100)

这里k是随机数的个数

print(list(random.choices([1, 2, 3, 4, 5], k=100)))