python-random模块详解

0.摘要

本文主要介绍random模块的各种方法,并用python3做功能展示。

1.random.random()

产生一个位于[0,1)区间的随机数。

random.random() #产生一个[0,1)的数
10 * random.random() #产生一个[0,10)的数

2.random.uniform(a,b)

这个方法的官方解释很高深,理解不了:

uniform(a, b) method of random.Random instance
    Get a random number in the range [a, b) or [a, b] depending on rounding.

右区间的开闭取决于四舍五入,怎么个四舍五入呢?找到一个看似正确的解释,供和我一样迷惑的读者参考吧。

https://stackoverflow.com/questions/13213496/what-does-depending-on-rounding-exactly-mean

a = random.uniform(1.23,4.56) #产生一个位于1.23~4.56范围内的随机数
b = random.uniform(1.5,-10) #产生一个位于-10~1.5范围内的随机数

我自己的直观理解,就是random.uniform(a,b),得到的是一个位于a,b之间的随机数(暂且不讨论区间开闭问题),

并且,a > b,a =b,a<b都可以。

3.random.randint(a,b)

生成一个位于[a,b]的随机整数。a<=b 。注意,两边都是闭区间。

r = random.randint(-100,100) #产生一个位于[-100,100]区间内的整数

4.random.randrange(start,stop,step)

生成一个位于[start,stop)的随机整数,注意,start,stop,step都必须是整数,step为可选参数,默认步长为1。

这个函数主要是为了弥补randint方法的不足,因为randint随机数生成区间两边都是闭区间,这在python中是不友好的。

并且,start 可以小于 stop(步长需要为负数)。

r = random.randrange(1,100) #产生一个在[1,100)之间的整数
r = random.randrange(100,0,-2) #从(0,100]区间中,随机取一个偶数

5.random.sample(population, k)

从population取k个不重复的元素,并存放到列表中,原始数据population保持不变。

population可以是列表、元组、集合。

a = range(100)
b = set(a)
print(random.sample(a,10)) #从列表a中随机取10个元素
print(random.sample(b,10)) #从集合b中随机取10个元素

6.random.choice(seq)

从非空列表中随机选取一个元素。

seq可以是列表、元组。

a = range(100)
b = tuple(a)
print(random.choice(a)) # 从列表a中随机选取一个元素
print(random.choice(b)) # 从元组b中随机选取一个元素

7.random.shuffle(x, random=None)

将x随机打乱,并替换现有的x。该函数没有返回值。

这里说一下random参数:这个参数通常不使用,它要求是一个函数,该函数无参数,能够返回 [0.0, 1.0)的随机值。如果random=None,则random=random.random.

a = list(range(10))
print(a)
random.shuffle(a)
print(a)

运行上述程序,我们会发现执行random.shuffle前后的两个a不同了,后者被随即打乱。

这里再举一个random参数的例子,不再详细说明:

import random
import numpy as np

a = list(range(10))
random.shuffle(a,np.random.random)
print(a)

8.random.seed(x)

random.seed(x)用于设置随机函数的初始状态,如果x相同,那么两次random操作,得到的结果就是相同的。

x是实数,可以是整数,也可以是浮点数,可以使正数,也可以是负数或0。

import random

a = random.random()
b = random.random()
print(a,b)

random.seed(0)
a = random.random()
random.seed(0)
b = random.random()
print(a,b)

从结果上看,第一次a,b是不同的,第二次的a,b是相同的。

注意:random.seed()作用效果只有一次:

import random

random.seed(1)
for _ in range(10):
    print(random.randint(1,10),end=' ')

print()
print('==================================')

for _ in range(10):
    random.seed(1)
    print(random.randint(1, 10),end=' ')

由于第二次random.seed()写在了for循环中,所以输出的都是3.

猜你喜欢

转载自blog.csdn.net/qq_17753903/article/details/82958348
今日推荐