python3 random模块的用法

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

你可能感兴趣的:(python3 random模块的用法)