python学习笔记(四)——random随机数生成

python中的random模块是用于生成随机数的一个模块,经常被使用。random模块在pandas,numpy等数据处理模库中也含有,但是跟直接的random模块可能会存在一些细微的差别。
更简单直观的可以看这篇博客:https://blog.csdn.net/ckk727/article/details/99548223

单个随机元素生成

生成随机整数

a=random.randint(0,10)             #生成范围内的随机整数,左右都是闭区间。
                                   #np中的random.randint是左闭右开区间
b=random.randrange(0,10,2)        #在范围内按照间隔生成的整数中随机选取一个
print(a,b)
#out:	5,4

生成随机实数

c=random.random()                  #生成[0,1)内的随机浮点数
d=random.uniform(1.1,2.1)          #生成范围内的随机实数,左闭右开区间
print(c,d)
#out:	 0.5535116341042495,1.7773505872209385

随机挑选

s={'a':1,'b':2,'c':3}
e=random.choice(range(1,5))        #从序列中随机选取一个元素
f=random.choice(list(s.items()))   #在把字典转化为列表的迭代器中选取
print(e,f)
#out:	 41,('b', 2),

choice()函数的作用对象必须是序列对象,比如列表,元组,字符串。而字典跟集合不是序列对象,但是是可迭代对象。
打乱排序

ss=[1,2,3,4,5]
random.shuffle(ss)                 #打乱原迭代器内顺序,直接改变原数组,没有返回值
sx=random.shuffle(ss)
print(s,ss)
#out:	[1, 2, 4, 5, 3]  None

shuffle()打乱原序列对象,直接改变原序列,没有返回值


批量随机数生成

random通常从某种分布中挑选一个数,要批量生成通常跟for循环以及range()函数连用

生成批量随机数

lst=list(random.randint(0,10) for _ in range(10))
print(lst)
#out:	[5, 8, 0, 7, 6, 7, 5, 8, 2, 6]

lst2=list(round(random.uniform(1.1,2.1),2) for _ in range(5))
print(lst2)
#out:	[1.99, 1.25, 1.33, 1.45, 1.39]

批量随机挑选
choices()跟sample()函数都能实现随机抽样,但是一个是又放回的抽取k个,另一个是一次性抽取k个,相当于无放回的抽样。

choices()

random.choices(population,weights=None,*,cum_weights=None,k=1)
choices()函数有三个可选参数,weights,每个元素选取的相对权重,cum_weights累计权重,k抽取个数,默认为1

import random
a = [1,2,3,4,5]
#1
print(random.choices(a,k=5))
#2
print(random.choices(a,weights=[0,0,1,0,0],k=5))
#3
print(random.choices(a,weights=[1,1,1,1,1],k=5))
#4
print(random.choices(a,cum_weights=[1,1,1,1,1],k=5))

多运行几次的话就能看出结果的差别了

#1 : 重复输出10次列表a中的各个成员出现概率基本持平。
#2 : 重复输出10次每次输出均得到[3,3,3,3,3]结果。
#3 : 重复输出10次列表a中的各个成员出现概率基本持平。
#4 : 重复输出10次每次输出均得到[1,1,1,1,1]结果。

sample()
sample()函数包含两个参数,第一个序列目标,第二个抽取个数,不能缺少

import random
lst=list(range(10))
lst1=random.sample(lst,5)
print(lst,lst1)
#out:
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [7, 8, 2, 0, 1]

我们看看这两个函数对字符串的操作

strs='abcdefg'
str1=random.choices(strs,k=3)
str2=random.sample(strs,3)
print(str1,str2)
#out:	['c', 'a', 'f']  ['b', 'c', 'e']

输出的都是列表

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值