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]