随机产生重复元素

时间:2019-03-20 08:39:28

标签: python python-3.x random

使用随机模块时

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]

生成重复的元素。

4 个答案:

答案 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]