我们用来在项目中为样本数据生成一个随机数,然后将其用于测试,填充空列或用于许多其他目的,关键是我们需要生成随机数据。在python中,有多种生成随机数据的方法,我们将在本文中探索其中一些-
random()
模块python附带的重要库之一是随机的,我们将在代码中使用它。
要在您的代码中使用此模块,只需导入它即可,我们已经准备好使用它。
import random
让我们看看如何使用它-
import random print("What i will get, no idea as i'm using random.random()") print(random.random())
输出结果
What i will get, no idea as i'm using random.random() 0.5306626723173611
第二次,如果我尝试运行相同的程序,您将获得不同的输出-
What i will get, no idea as i'm using random.random() 0.5504289430397661
random()是随机模块的基本功能
随机模块的几乎所有功能都使用random()
方法。
Random()函数将生成介于[0.0到1.0)之间的任何数字。
下面两个函数我们用来生成随机整数-
randint()
randrange()
from random import randint, randrange print("Printing random integer ", randint(0, 20)) print("Printing random integer ", randrange(0, 20, 2))
输出结果
Printing random integer 15 Printing random integer 4
考虑我们有一个公司名称列表,我们想从该列表中检索一个项目(公司名称)。我们可以做到这一点,
import random companies = ['RELIANCE', 'TCS', 'INFY', 'SBI', 'PNB','HDFC'] print('Randomly selecting company from a list: ', random.choice(companies))
输出结果
Randomly selecting company from a list: INFY
考虑上面的示例,但是我们不想从一个列表中随机选择一个项目(公司),而是可以通过random.sample()函数实现这一点-
import random companies = ['RELIANCE', 'TCS', 'INFY', 'SBI', 'PNB','HDFC'] print('Randomly selecting 3 companies from a list: ', random.sample(companies,3))
输出结果
Randomly selecting 3 companies from a list: ['TCS', 'RELIANCE', 'INFY']
但是,如果我们尝试选择的项目多于列表中的项目数,则会遇到ValueError-
输入-
random.sample(companies,20)
输出-
ValueError: Sample larger than population or is negative
从列表中选择多个随机项的另一种方法是– random.choices()。
import random companies = ['RELIANCE', 'TCS', 'INFY', 'SBI', 'PNB','HDFC'] print('Randomly selecting 3 companies from a list: ', random.choices(companies,k=6))
输出结果
Randomly selecting 3 companies from a list: ['TCS', 'TCS', 'INFY', 'HDFC', 'INFY', 'TCS']
从上面的输出中可以看出,使用random.choices()方法可以从列表中获得重复项。
伪随机数生成器通过对值执行某些运算来工作。通常,此值是生成器生成的先前数字。但是,第一次使用生成器时,没有先前的值。
import random print("Seed value 10: ") # Initialize seed value random.seed(10) for i in range(5): print(random.randint(1,100)) print() print("Seed Value 5: ") # this time we'll get different values random.seed(5) for i in range(5): print(random.randint(1,100)) print() print("Seed value: 10") # will get the same result, what we got initially random.seed(10) for i in range(5): print(random.randint(1,100))
输出结果
Seed value 10: 74 5 55 62 74 Seed Value 5: 80 33 95 46 89 Seed value: 10 74 5 55 62 74
从上面的示例可以看出,如果种子相同,那么它将生成第一个先前的值。每个种子值对应于给定随机数生成器的生成值的固定序列。
我们可以在python 3.x中生成一个加密安全的随机数。如果我们拥有python 3.6或更高版本,则可以使用新的secrets模块和下面的rand函数。它将生成一个低于指定值的随机数。
import secrets #generate 10 secure random numbers between 10 and 500 for x in range(0,10): secV =10+ secrets.randbelow(500) print(secV)
输出结果
464 406 184 293 399 332 495 292 118 134
对于python 3.5或更低版本的另一种方法,我们可以使用random模块和SystemRandom类来生成加密安全的随机数,
import random randGen = random.SystemRandom() for x in range(0,10): secV = 10+ randGen.randint(0,499) print(secV)
输出结果
374 211 425 264 217 97 210 39 319 52
另一种方法是使用随机和秘密(以保护数据)模块。
import secrets import random secNum = random.SystemRandom().random() print("secure number is ", secNum) print("Secure byte token", secrets.token_bytes(16))
输出结果
secure number is 0.5205307353786663 Secure byte token b'\x05T>\xacsqn0\x08\xc4\xf4\x8aU\x13\x9f\xcf'