python v3.7.0
random是python产生随机数的内置库,随机种子默认为系统时钟。下面分析模块中的方法:
random.random()
生成一个随机的浮点数,范围是在[0,1)之间。
import random
a=random.random()
print(a)
0.4156918860673895
print('{0:.3f}'.format(a))
0.416
print(round(a,3))
0.416
random.uniform(a,b)
random.uniform()方法可以设定生成的随机浮点数的范围,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a
print(random.uniform(1, 1))
1.0
print(random.uniform(1, 2))
1.222097652142283
print(random.uniform(10, 2))
3.2784286513984773
random.randint(start, end)
随机生一个整数int类型,可以指定这个整数的范围(闭区间 [start, end]),和random.uniform()方法不同,当start>end的时候会抛出异常。
print(random.randint(1, 1))
1
print(random.randint(1, 2))
2
print(random.randint(2, 1))
ValueError: empty range for randrange() (2,2, 0)
random.choice(seq)
可以从列表,元组或字符串中选取 一个 随机的元素返回。
print(random.choice([1, 2, 'a']))
2
print(random.choice((3, 4, 5)))
4
print(random.choice("abc"))
c
# 生成指定长度的随机字符串
import string
def generate_random_string(k, chars=None):
if chars is None:
chars = string.ascii_letters
else:
for name, seeds in [('[LOWER]', string.ascii_lowercase), ('[UPPER]', string.ascii_uppercase), ('[NUMBER]', string.digits),
('[LETTERS]', string.ascii_letters)]:
chars = chars.replace(name, seeds)
return ''.join([random.choice(chars) for _ in range(k)])
# return ''.join([seeds[random.randint(0, len(chars) - 1)] for _ in range(k)]) # randint是闭区间,所以需要-1
random.choices(population,weights=None,*,cum_weights=None,k=1)
Python v3.6新增
作用:从集群中随机选择k次数据,支持设置权重,并返回一个列表。
参数说明:
- population: 集群
- weights:相对权重
- cum_weights:累加权重
- k: 选取次数
L = [1, 2, 3, 4, 5]
t1 = random.choices(L, k=3)
t2 = random.choices(L, weights=[0, 0, 0, 1, 0], k=3)
print(t1, t2)
>>>
[5, 3, 1] [4, 4, 4]
参数weights设置相对权重,它的值是一个列表,设置之后,每一个成员被抽取到的概率就被确定了。比如weights=[1,2,3,4,5],那么第一个成员的概率就是P=1/(1+2+3+4+5)=1/15。
cum_weights设置累加权重,代码中会自动把相对权重转换为累加权重,即如果直接给出累加权重,那么就不需要
给出相对权重。比如weights=[1,2,3,4],那么cum_weights=[1,3,6,10]。
random.shuffle(list)
随机打乱序列元素的位置,只能针对可变序列,对于元组等不可变序列会报错。要注意,random.shuffle()会直接作用于seq本身,而不会返回任何值,如:
print(random.shuffle([1, 2, 3]))
None
a = [1, 2, 3]
b = a[:]
random.shuffle(b)
print(a, b)
[1, 2, 3] [1, 3, 2]
random.sample(seq,k)
可以从指定的序列(可变or不可变)中,随机选取指定长度的片断,并返回一个列表,k的取值范围是 [0,len(seq)]。
a = "abcdefg"
print(random.sample(a, len(a)))
['c', 'a', 'g', 'b', 'f', 'd', 'e']
b = [1, 2, 3, "ab"]
print(random.sample(a, len(b) - 2))
['d', 'a']
print(random.sample(a, 0))
[ ]
random.send(n=None)
seed( ) 用于指定随机数生成时所用算法开始的整数值。n代表随机种子;当n=None时,随机种子为系统时间,此时每次生成的随机数因时间差异而不同,当n为其他的数据,如int,str等,则以提供的数据作为随机种子,此时生成的随机数列固定。
random.seed('test')
print(random.random())
0.6555960613392863
random.seed('test')
print(random.random())
0.6555960613392863