zoukankan      html  css  js  c++  java
  • 【转】Python 玩转随机数

    Python中的random模块用于生成随机数。下面介绍一下random模块中最常用的几个函数。

    random.random

    random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0

    random.uniform

    random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。

    如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。

     

     1 print random.uniform(10, 20)  
     2 print random.uniform(20, 10)  
     3 
     4 #---- 结果(不同机器上的结果不一样)  
     5 
     6 #18.7356606526  
     7 #12.5798298022  
     8 
     9 print random.uniform(10, 20) print random.uniform(20, 10) 
    10 #---- 结果(不同机器上的结果不一样) #18.7356606526 #12.5798298022

     

     random.randint

    random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。

    其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b

     

    1 print random.randint(12, 20)  #生成的随机数n: 12 <= n <= 20  
    2 
    3 print random.randint(20, 20)  #结果永远是20  
    4 
    5 #print random.randint(20, 10)  #该语句是错误的。下限必须小于上限。  
    6 
    7 print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 #print random.randint(20, 10) #该语句是错误的。下限必须小于上限。

     

    random.randrange

    random.randrange的函数原型为:random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。

    如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。

    random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。

    random.choice

    random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。

    参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。

    有关sequence可以查看python手册数据模型这一章。下面是使用choice的一些例子:

    1 print random.choice("学习Python")   
    2 
    3 print random.choice(["JGood", "is", "a", "handsome", "boy"])  
    4 
    5 print random.choice(("Tuple", "List", "Dict"))  
    6 
    7 print random.choice("学习Python") print random.choice(["JGood", "is", "a", "handsome", "boy"]) print random.choice(("Tuple", "List", "Dict"))

     

    random.shuffle

    random.shuffle的函数原型为:random.shuffle(x[, random]),用于将一个列表中的元素打乱。如:

     1 p = ["Python", "is", "powerful", "simple", "and so on..."]  
     2 
     3 random.shuffle(p)  
     4 
     5 print p  
     6 
     7 #---- 结果(不同机器上的结果可能不一样。)  
     8 
     9 #['powerful', 'simple', 'is', 'Python', 'and so on...']  
    10 
    11 p = ["Python", "is", "powerful", "simple", "and so on..."] random.shuffle(p) print p #---- 结果(不同机器上的结果可能不一样。) #['powerful', 'simple', 'is', 'Python', 'and so on...']

     

    random.sample

    random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。

     

    1 list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  
    2 slice = random.sample(list, 5)  #从list中随机获取5个元素,作为一个片断返回  
    3 print slice  
    4 print list #原有序列并没有改变。  

     

     1 随机整数:
     2 >>> import random
     3 >>> random.randint(0,99)
     4 21
     5 
     6 随机选取0到100间的偶数:
     7 >>> import random
     8 >>> random.randrange(0, 101, 2)
     9 42
    10 
    11 随机浮点数:
    12 >>> import random
    13 >>> random.random() 
    14 0.85415370477785668
    15 >>> random.uniform(1, 10)
    16 5.4221167969800881
    17 
    18 随机字符:
    19 >>> import random
    20 >>> random.choice('abcdefg&#%^*f')
    21 'd'
    22 
    23 多个字符中选取特定数量的字符:
    24 >>> import random
    25 random.sample('abcdefghij',3) 
    26 ['a', 'd', 'b']
    27 
    28 多个字符中选取特定数量的字符组成新字符串:
    29 >>> import random
    30 >>> import string
    31 >>> string.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).r
    32 eplace(" ","")
    33 'fih'
    34 
    35 随机选取字符串:
    36 >>> import random
    37 >>> random.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )
    38 'lemon'
    39 
    40 洗牌:
    41 >>> import random
    42 >>> items = [1, 2, 3, 4, 5, 6]
    43 >>> random.shuffle(items)
    44 >>> items
    45 [3, 2, 5, 6, 4, 1]

     

     

    二、使用numpy.random模块来生成随机数组

    1、np.random.rand 用于生成[0.0, 1.0)之间的随机浮点数, 当没有参数时,返回一个随机浮点数,当有一个参数时,返回该参数长度大小的一维随机浮点数数组,参数建议是整数型,因为未来版本的numpy可能不支持非整形参数。
    1 import numpy as np
    2 >>>  np.random.rand(10)
    3 array([ 0.56911206,  0.99777291,  0.18943144,  0.19387287,  0.75090637,
    4         0.18692814,  0.69804514,  0.48808425,  0.79440667,  0.66959075])

    当然该函数还可以用于生成多维数组,这里不做详述。

    2、np.random.randn该函数返回一个样本,具有标准正态分布。
    1 >>> np.random.randn(10)
    2 array([-1.6765704 ,  0.66361856,  0.04029481,  1.19965741, -0.57514593,
    3        -0.79603968,  1.52261545, -2.17401814,  0.86671727, -1.17945975])
    3、np.random.randint(low[, high, size]) 返回随机的整数,位于半开区间 [low, high)。
    >>> np.random.randint(10,size=10)
    array([4, 1, 4, 3, 8, 2, 8, 5, 8, 9])
    4、random_integers(low[, high, size]) 返回随机的整数,位于闭区间 [low, high]。
    >>> np.random.random_integers(5)
    4
    5、np.random.shuffle(x) 类似洗牌,打乱顺序;np.random.permutation(x)返回一个随机排列
    >>> arr = np.arange(10)
    >>> np.random.shuffle(arr)
    >>> arr
    [1 7 5 2 9 4 3 6 0 8]
    
    >>>> np.random.permutation(10)
    array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])
  • 相关阅读:
    Linux常用命令-centos
    USACO 2006 Open, Problem. The Country Fair 动态规划
    USACO 2007 March Contest, Silver Problem 1. Cow Traffic
    USACO 2007 December Contest, Silver Problem 2. Building Roads Kruskal最小生成树算法
    USACO 2015 February Contest, Silver Problem 3. Superbull Prim最小生成树算法
    LG-P2804 神秘数字/LG-P1196 火柴排队 归并排序, 逆序对
    数据结构 并查集
    浴谷国庆集训 对拍
    1999 NOIP 回文数
    2010 NOIP 普及组 第3题 导弹拦截
  • 原文地址:https://www.cnblogs.com/twilight77/p/7675512.html
Copyright © 2011-2022 走看看