随机生成重复元素

问题描述 投票:2回答:4

使用随机模块时

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]

生成重复的元素。

python python-3.x random
4个回答
2
投票

正如你所见,sample是错误的工具。相反,你可以使用choices

choices([10, 20, 30, 40, 50], k=4)     

1
投票

您可以尝试使用Python的标准random.choices,您可以为您生成的每个元素指定可选权重。 Docs

choices([10, 20, 30, 40, 50], weights=[5, 50, 10, 15, 10], k=4)

产量

[40, 20, 50, 20]

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] 

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]
© www.soinside.com 2019 - 2024. All rights reserved.