python中random.choice()函数

1. random.choice(seq)函数

从非空序列中随机选取一个数据并返回,该序列可以是list、tuple、str、set。
举例:

import random
print(random.choice('choice')) 
结果:choice其中任意一个字母,可能是c也可能是h...

2. random.choices(population,weights=None,*,cum_weights=None,k=1)函数

  1. population:集合
  2. weights:相对权重
  3. cum_weights:累加权重
  4. k:选取次数

作用:从集合中随机选取k次数据,返回一个列表,可以设置权重
**注意:**每次选取都不会影响原序列,每一次选取都是基于原序列。从population中进行K次有放回随机选取,每次选取一个元素(注意会出现同一个元素多次被选中的情况)
举例(可以多输出几次看看规律。):

import random
a = [1,2,3,4,5]
print(random.choices(a,k=6))
解析:重复6次从列表a中的各个成员中选取一个数输出,各个成员出现概率基本持平。
结果:[5, 4, 5, 4, 1, 3](随机生成的)
print(random.choices(a,weights=[0,0,1,0,0],k=6))
解析:重复6次从列表a中提取3,最终得到[3, 3, 3, 3, 3, 3]
结果:[3, 3, 3, 3, 3, 3](固定结果)
print(random.choices(a,weights=[1,1,1,1,1],k=6))
解析:重复6次从列表a中的各个成员中选取一个数输出,各个成员出现概率基本持平。
结果:[5, 4, 3, 5, 4, 3](随机生成的)
print(random.choices(a,cum_weights=[1,1,1,1,1],k=6))
结果:[1, 1, 1, 1, 1, 1](固定结果)

结论:

参数weights设置相对权重,它的值是一个列表,设置之后,每一个成员被抽取到的概率就被确定了。
比如weights=[1,2,3,4,5],那么第一个成员的概率就是P=1/(1+2+3+4+5)=1/15。

cum_weights设置累加权重,Python会自动把相对权重转换为累加权重,即如果你直接给出累加权重,
那么就不需要
给出相对权重,且Python省略了一步执行。
比如weights=[1,2,3,4],那么cum_weights=[1,3,6,10]
这也就不难理解为什么cum_weights=[1,1,1,1,1]输出全是第一个成员1了。

3. random sample()

从population中无放回取样,一次取k个,返回一个k长的列表

random.sample
import random

_list = [n for n in range(1000)]
x = random.sample(_list, k=100)
print(len(set(x)) == len(x))
#输出结果为:True

4. 总结

  1. choice(seq): 从seq序列中(可以是列表,元组,字符串)随机取一个元素返回

  2. choices(population, weights=None, *, cum_weights=None, k=1):从population中进行K次有放回随机选取,每次选取一个元素(注意会出现同一个元素多次被选中的情况),weights是相对权重值,population中有几个元素就要有相对应的weights值,cum_weights是累加权重值,例如,相对权重〔10, 5, 30,5〕相当于累积权重〔10, 15, 45,50〕。在内部,在进行选择之前,相对权重被转换为累积权重,因此提供累积权重节省了工作。返回一个列表。

  3. sample(population, k):从population中无放回取样,一次取k个,返回一个k长的列表。可以像这样使用sample(range(10000000), k=60)

5. 相关链接

Python: random模块的随即取样函数:choice(),choices(),sample()
Python学习:random模块下的choices()函数详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值