Python 随机数据:来了解它如何生成

举报
Tiamo_T 发表于 2021/10/02 20:15:36 2021/10/02
【摘要】 在开发过程中的某个时刻,您可能需要在 Python 中生成随机数据。在这里,我们将看到如何做到这一点。Python 内置的 random 模块用于生成特定范围内的随机数(例如整数或浮点数)。它还允许生成带有随机元素的字符串和列表。Numpy 库还提供了 random 模块来生成随机数据结构。我们将通过多种方式应用 Python 内置的 random 模块和 Numpy random 模块。让...

在开发过程中的某个时刻,您可能需要在 Python 中生成随机数据。在这里,我们将看到如何做到这一点。

Python 内置的 random 模块用于生成特定范围内的随机数(例如整数或浮点数)。它还允许生成带有随机元素的字符串和列表。Numpy 库还提供了 random 模块来生成随机数据结构。

我们将通过多种方式应用 Python 内置的 random 模块和 Numpy random 模块。

让我们从一些例子开始!

如何在 Python 中生成 0 和 1 之间的随机数?

Python 提供了一个生成随机数的模块random 模块

random 模块最基本的方法是random 方法

这是 random 方法的作用,它生成一个介于 0 和 1 之间的随机浮点数:

>>> import random
>>> random.random()
0.7854170732801697
>>> random.random()
0.7340120513329158
>>> random.random()
0.5851946653258203         

如果我们想生成一个介于 0 和 10 之间的随机浮点数呢?

我们可以使用random.uniform()方法并传递两个参数来定义范围的开始和结束。

>>> random.uniform(1, 10)
1.6010581832190662
>>> random.uniform(1, 10)
6.788702746057039
>>> random.uniform(1, 10)
8.085425419675126         

同样,要生成 0 到 100 之间的随机数,我们使用以下命令。

>>> random.uniform(1, 100)
80.84958257046604
>>> random.uniform(1, 100)
24.326120311951602
>>> random.uniform(1, 100)
41.81256739317393         

如何使用 Numpy 在 0 和 1 之间生成随机浮点数

Numpy 库还提供了一个生成随机数的模块。

以下是如何使用 Numpy 生成 0 到 1 之间的随机数:

>>> import numpy as np
>>> np.random.random()
0.335309649692459
>>> np.random.random()
0.4965360512032966
>>> np.random.random()
0.7790850138688835         

Numpy 还为 Python 随机内置模块提供了我们在上一节中看到的 uniform() 方法。

以下是我们如何使用 Numpy 生成 0 到 10 之间的随机浮点数:

>>> np.random.uniform(0, 10)
6.811695148603444
>>> np.random.uniform(0, 10)
6.888316097297719
>>> np.random.uniform(0, 10)
1.610517388296695         

稍后,在本教程中,我们将看到我们还可以使用 Numpy random 模块做什么。

现在让我们生成随机整数

在 Python 中生成一个随机整数

Python random 内置模块的randint()方法生成一个随机整数。

这是当我不带参数调用 randint 方法时会发生什么

>>> random.randint()
Traceback (most recent call last):
  File "", line 1, in 
    random.randint()
TypeError: randint() missing 2 required positional arguments: 'a' and 'b'         

根据错误,randint 方法需要两个参数。我们可以使用帮助功能获得更多详细信息。

>>> help(random.randint)
Help on method randint in module random:         

randint(a, b) method of random.Random instance
    Return random integer in range [a, b], including both end points.

因此,要传递给 randint 方法的 a 和 b 参数定义了生成整数的范围。

使用以下命令,我们返回 1 到 100 范围内的随机整数:

>>> random.randint(1, 100)
11
>>> random.randint(1, 100)
32
>>> random.randint(1, 100)
26         

内置的 random 模块还提供了一个名为randrange的方法。让我们找出与randint方法的区别。

这是它的帮助:

randrange(start, stop=None, step=1, _int=) method of random.Random instance
    Choose a random item from range(start, stop[, step]).

使用 randint 生成的数字示例

>>> random.randint(1,3)
1
>>> random.randint(1,3)
3
>>> random.randint(1,3)
3         

使用 randrange 生成的数字示例

>>> random.randrange(1,3)
1
>>> random.randrange(1,3)
2
>>> random.randrange(1,3)
2         

我已经使用上面的示例来说明randint方法包括用于生成随机数的范围内的两个参数。

另一方面,randrange方法从范围中排除第二个参数。

使用 Random 内置模块生成随机数列表

以下代码使用 Python random 内置模块和 while 循环生成随机整数列表:

>>> random_numbers = []
>>> while len(random_numbers) < 10:
        random_numbers.append(random.randint(1, 100))
>>> print(random_numbers)
[49, 2, 37, 9, 43, 26, 89, 71, 60, 41]         

只要列表少于 10 个数字,就会执行 while 循环内的代码。

下一节展示了一种用更少代码来做到这一点的方法……

使用 Numpy 生成随机数列表

您还可以使用Numpy库生成随机数列表。

下面你可以看到Numpy random模块中的一些方法:

>>> import numpy as np
>>> np.random.ra
np.random.rand(             np.random.randn(            np.random.random_integers(  np.random.ranf(
np.random.randint(          np.random.random(           np.random.random_sample(    np.random.rayleigh(         

要生成随机整数列表,我们可以使用 randint() 方法。它与我们在 Python 内置 random 模块中看到的方法同名,但更灵活。

>>> np.random.randint(1, 10, 10)
array([8, 2, 6, 4, 6, 4, 2, 1, 4, 9])         

我们已经向该方法传递了三个参数。前两个用于指定生成随机整数的范围的开始(包括)结束(不包括)

第三个参数用于返回一个包含 10 个元素的 Numpy 数组。

作为第三个参数,我们也可以传递一个整数元组。当我们这样做时会发生以下情况:

>>> np.random.randint(1, 10, (5,5))
array([[4, 1, 9, 3, 4],
       [7, 1, 8, 1, 2],
       [1, 2, 3, 8, 2],
       [9, 1, 3, 6, 8],
       [9, 9, 4, 8, 6]])         

我们得到一个 5 x 5 的多维数组(或矩阵)。

从 Python 列表中获取随机元素

使用 Python random 模块,您还可以从列表中检索随机元素。

当我们向它们传递字符列表时,让我们比较以下方法的行为:

  • 随机选择()
  • 随机选择()
  • 随机样品()

随机选择()

从序列中返回一个随机元素。

>>> random.choice(['h', 'e', 'l', 'l', 'o'])
'o'
>>> random.choice(['h', 'e', 'l', 'l', 'o'])
'h'
>>> random.choice(['h', 'e', 'l', 'l', 'o'])
'o'         

随机选择()

从序列中返回随机元素列表。列表的默认大小为 1。

>>> random.choices(['h', 'e', 'l', 'l', 'o'])
['l']
>>> random.choices(['h', 'e', 'l', 'l', 'o'])
['o']
>>> random.choices(['h', 'e', 'l', 'l', 'o'])
['o']         

这是我们如何生成具有 2 个元素的列表。我们必须为参数 k 传递一个值。

>>> random.choices(['h', 'e', 'l', 'l', 'o'], k=2)
['o', 'l']
>>> random.choices(['h', 'e', 'l', 'l', 'o'], k=2)
['o', 'h']
>>> random.choices(['h', 'e', 'l', 'l', 'o'], k=2)
['e', 'l']         

随机样品()

它还从序列中返回 k 个随机元素。

当我们使用方法 sample() 简单地将列表传递给它时,我们会返回以下错误:

>>> random.sample(['h', 'e', 'l', 'l', 'o'])
Traceback (most recent call last):
  File "", line 1, in 
TypeError: sample() missing 1 required positional argument: 'k'         

那是因为 sample() 方法需要传递 k 参数。

>>> random.sample(['h', 'e', 'l', 'l', 'o'], k=1)
['l']
>>> random.sample(['h', 'e', 'l', 'l', 'o'], k=2)
['o', 'l']
>>> random.sample(['h', 'e', 'l', 'l', 'o'], k=3)
['h', 'l', 'o']         

在 Python 中生成随机字符串

我们可以使用我们在上一节中学到的知识来生成随机字符串。

让我们从以下几点开始:

random.choice(['h', 'e', 'l', 'l', 'o'])

如果我们对上面的表达式应用列表推导式,我们可以创建一个随机字符列表:

>>> [random.choice(['h', 'e', 'l', 'l', 'o']) for i in range(5)]
['l', 'o', 'h', 'o', 'l']         

现在我们可以将string join() 方法应用于之前生成的列表:

>>> ''.join([random.choice(['h', 'e', 'l', 'l', 'o']) for i in range(5)])
'holhl'         

考虑到 sample() 已经返回一个列表,我们不需要使用 sample() 方法进行列表推导。

我们可以生成一个长度为 5 个字符的随机列表,只需传递 k=5。

>>> ''.join(random.sample(['h', 'e', 'l', 'l', 'o'], k=5))
'loleh'         

在进入下一节之前,我将向您展示如何使用 string 模块和 random 模块来生成随机数字字符串、随机字母字符串和随机字母数字字符串。

生成随机数字字符串

>>> import string
>>> string.digits
'0123456789'
>>> ''.join(random.sample(string.digits, k=5))
'31729'                 

生成随机字母串

>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> ''.join(random.sample(string.ascii_letters, k=5))
'qOUtD'                

如果您不想混合使用大写和小写字母,也可以使用string.ascii_lowercasestring.ascii_uppercase

生成随机字母数字字符串

生成字母数字字符串的一种方法是连接string.digits 和 string.ascii_letters。

为了连接使用 string 模块生成的两个字符串,我们将使用 + 运算符。

>>> all_characters = string.digits + string.ascii_letters
>>> all_characters
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> ''.join(random.sample(all_characters, k=5))
'R7moj'               

另外,尝试相同的代码,但这次使用string.printable。看看您的随机字符串中还包含哪些其他字符。

如何在 Python 中创建随机 UUID 字符串

要生成一个随机UUID在Python可以使用uuid4功能的的UUID模块

>>> import uuid
>>> uuid.uuid4()
UUID('df78ded3-d9f0-419d-a556-78eec59d838b')
>>> type(uuid.uuid4())
<class 'uuid.UUID'>

我们返回的对象是 uuid.UUID 类型。要将其转换为字符串,我们可以使用str() 函数

>>> str(uuid.uuid4())
'2bc19645-bb49-45e6-bfc7-f39304e75d27'         

下面你可以看到 uuid 模块中可用的四个函数来生成 UUID(包括我们刚刚使用的 uuid4)。

在 Python 中生成随机 UUID

现在您知道如何在 Python 中生成随机数、随机字符串和随机列表。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。