使用随机模块时
In [1]: from random import *
In [2]: sample([10, 20, 30, 40, 50], k=4)
Out[2]: [20, 30, 50, 10]
结果不是随机完成的
怎么会产生一个结果
In [2]: sample([10, 20, 30, 40, 50], k=4)
Out[2]: [20, 20, 20, 10]
生成重复的元素。
正如你所见,sample
是错误的工具。相反,你可以使用choices
:
choices([10, 20, 30, 40, 50], k=4)
您可以尝试使用Python的标准random.choices
,您可以为您生成的每个元素指定可选权重。 Docs:
choices([10, 20, 30, 40, 50], weights=[5, 50, 10, 15, 10], k=4)
产量
[40, 20, 50, 20]
你可以使用numpy.random.choice
import numpy as np
x = [10, 20, 30, 40, 50]
print(np.random.choice(x, 4, replace=True))
输出:
[50 50 30 30]
您正在寻找的是random.choices
- Python 3.6版中的新功能。 - 功能定义如下;你可以阅读更多here。
random.choices(population, weights=None, *, cum_weights=None, k=1)
您可以指定weights
以使特定元素优先于其他元素。 - 虽然我相信下面的例子可以满足您的需求。
例
import random
random.choices([1, 2, 3, 4], k=4)
或者在较旧的Python版本中,您可以使用random.choice
,如下所示;虽然它只支持一个参数,一个序列。
例
import random
population = [1, 2, 3, 4, 5]
def choices(population, k=1):
return [random.choice(population) for _ in range(k)] if k > 1 else random.choice(population)
choices(population, k=5)
产量
[2, 4, 2, 5, 1]