python 中的随机数

󰃭 2017-09-12

python 下随机数相关的处理, 使用random模块

从列表中随机获取一个

如果我们有一个列表, 想随机的获取一个,

In [99]: import random

In [100]: x = [832, 238, 12, 4, 93, 923]

In [101]: random.choice(x)
Out[101]: 832

In [102]: random.choice(x)
Out[102]: 4

In [103]: random.choice(x)
Out[103]: 93

从列表中随机获取若干个

如果我们想从列表中随机获取若干个, 而不是一个呢

In [108]: random.sample(x, 2)
Out[108]: [923, 238]

In [109]: random.sample(x, 2)
Out[109]: [4, 238]

In [110]: random.sample(x, 2)
Out[110]: [238, 832]

In [112]: random.sample(x, 3)
Out[112]: [4, 238, 832]

如果想从某个范围里获取若干个随机数, 使用range作为第一个参数, 生成范围列表, 这种方式既快, 又节省空间

如下

random.sample(range(10000), 30)
# [113,1898,2146,4340,1851,1753,2538,4673,5310,3898,4906,2339,4575,7513,1061,4164,5386,6417,7131,3913,1822,2942,1674,4718,4554,4454,5098,5911,5880,8212]

选取随机字符

如果选取一个, 应用的也是choice

In [182]: random.choice('abcdefghijklmn')
Out[182]: 'm'

In [183]: random.choice('abcdefghijklmn')
Out[183]: 'a'

In [184]: random.choice('abcdefghijklmn')
Out[184]: 'm'

如果是多个字符, 应用sample

In [185]: random.sample('abcdefghijklmn', 1)
Out[185]: ['b']

In [186]: random.sample('abcdefghijklmn', 2)
Out[186]: ['m', 'j']

In [187]: random.sample('abcdefghijklmn', 3)
Out[187]: ['j', 'e', 'f']

In [188]: random.sample('abcdefghijklmn', 3)
Out[188]: ['b', 'f', 'c']

生成随机整数

random.randint 用于生成随机整数

In [120]: random.randint(100, 200)
Out[120]: 166

In [121]: random.randint(100, 200)
Out[121]: 127

In [122]: random.randint(100, 200)
Out[122]: 106

生成随机偶数

random.randrange 可用于生成随机偶数

In [174]: random.randrange(0, 99, 2)
Out[174]: 22

In [175]: random.randrange(0, 99, 2)
Out[175]: 52

In [176]: random.randrange(0, 99, 2)
Out[176]: 88

In [177]: random.randrange(0, 99, 2)
Out[177]: 72

生成随机奇数

生成的偶数 +1 就变成了一个奇数 :-)

生成0~1随机浮点数

random.random 用于生成0~1区间内的浮点数

In [123]: random.random()
Out[123]: 0.3224130651756335

In [124]: random.random()
Out[124]: 0.9322351857889607

In [125]: random.random()
Out[125]: 0.4660361703787592

In [126]: random.random()
Out[126]: 0.3151170441943645

列表乱序

将列表的顺序打乱

In [145]: random.shuffle(x)

In [146]: x
Out[146]: [12, 923, 238, 93, 832, 4]

In [147]: random.shuffle(x)

In [148]: x
Out[148]: [923, 93, 4, 238, 832, 12]

这里要注意的是, 列表打乱顺序后, 修改的是源数组

In [147]: random.shuffle(x)

In [148]: x
Out[148]: [923, 93, 4, 238, 832, 12]

In [149]: id(x)
Out[149]: 4412865480

In [150]: random.shuffle(x)

In [151]: x
Out[151]: [238, 4, 12, 923, 832, 93]

In [152]: id(x)
Out[152]: 4412865480