使用随机模块时
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]
生成重复的元素。
答案 0 :(得分:2)
sample
是错误的工具。相反,您可以使用choices
:
choices([10, 20, 30, 40, 50], k=4)
答案 1 :(得分:1)
您可以尝试使用Python的标准main
,在其中您可以为生成的每个元素指定可选的权重。 Docs:
random.choices
输出
choices([10, 20, 30, 40, 50], weights=[5, 50, 10, 15, 10], k=4)
答案 2 :(得分:1)
您可以使用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]
答案 3 :(得分:1)
您要寻找的是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]