Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 随机生成重复的元素_Python_Python 3.x_Random - Fatal编程技术网

Python 随机生成重复的元素

Python 随机生成重复的元素,python,python-3.x,random,Python,Python 3.x,Random,使用随机模块时 In [1]: from random import * In [2]: sample([10, 20, 30, 40, 50], k=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]

生成重复元素。

sample
是错误的工具,正如您所看到的。相反,您可以使用:


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

选项([10,20,30,40,50],权重=[5,50,10,15,10],k=4)
输出

[40, 20, 50, 20]
你可以用

输出:

[50 50 30 30] 

您正在寻找的是
随机选择
-Python 3.6版中的新功能。-函数定义如下;你可以读更多

您可以分配
权重
,以使特定元素优先于其他元素。-虽然我相信下面的例子可以满足你的需要

示例

import random

random.choices([1, 2, 3, 4], k=4)
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)
或者,在较旧的Python版本中,您可以使用
random.choice
,如下所示;虽然它只支持一个参数,但支持一个序列

示例

import random

random.choices([1, 2, 3, 4], k=4)
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]
给你,你的问题已经得到了回答:)
[2, 4, 2, 5, 1]