【Python】随机数汇总(全!!!)

翠花上酸菜 2024-10-07 10:05:06 阅读 94

​我们写python代码的时候,很少能用得上随机数,但是随机数有很多妙用。例如,在我们做测试数据集的时候,可以构建一个随机的dataframe;

或者在保存数据的时候,可以在每条数据前插入一列作为,不重复的ID 字段使用,为作为文件或数据块生成一个唯一的“指纹”,用于快速识别或索引。可以根据需求来设置自己的数据“指纹”!

以下是一些使用随机数的汇总:

1、random模块的随机函数

random.random():

返回一个[0, 1)范围内的随机浮点数。

random.uniform(a, b):

返回一个指定范围内的随机浮点数,范围为[a, b]

random.randint(a, b): 返回一个随机整数N,使得a <= N <=b

random.randrange(start, stop, step):

从指定范围内按指定基数递增的元素中随机选择一个,类似于range函数。step 是步长,要求整数;当范围很大时,生成随机数可能会比较慢。

random.choice(seq): 从非空序列x中随机选择一个元素

random.shuffle(): 用于将序列x中的元素随机打乱。

random.sample(population, k): 从总体population中随机抽取k个元素,要求k <=len(population)。

以下是代码运行的部分:

<code>import random

print(random.random()) #0.9478274870593494

print(random.uniform(4, 5)) #4.056551367726809

print(random.randint(6,10)) #6

print(random.randrange(1, 10, 2)) #5

print('随机选择 100 以内一个偶数:',random.randrange(0, 101, 2))

#随机选择 1 到 100 之间的一个偶数

print('随机选择 100 以内的一个奇数:',random.randrange(1, 101, 2))

print(random.choice([1,5,4,8,7,14])#从列表中抽一个数出来

'''random.shuffle() 打乱列表'''

my_list = [1, 2, 3, 4, 5]

random.shuffle(my_list)

print(my_list) # 输出可能是 [1, 5, 3, 4, 2],每次输出可能不同

#random.shuffle 不会返回新的序列,而是就地修改传入的序列。

#由于 random.shuffle 修改的是原序列,如果需要保留原始序列,应该先复制一份序列,然后再进行打乱操作。

'''从列表中随机选择 2 个不重复的元素'''

items = ['Number1', 'Number2', 'Number3', 'Number4', 'Number5']

sample = random.sample(items, 2)

print(sample)

#['Number5', 'Number4']

2. 生成随机编码/字符串

用途:可以用来生成不重复的随机id,方便做数据库的管理

md5加密的各种函数

MD5是一种广泛使用的哈希函数,它可以产生一个128位(16字节)的哈希值,通常用一个32位的十六进制字符串表示。

可以使用的场景:

A .生成数据唯一的id(重复率低,比随机字符串靠谱)

B .MD5 用来做存储用户密码的哈希值

C .一些网站的连接的加密方式是:SSL/TLS通过使用非对称的 MD5加密来建立一个安全的连接,随后使用对称加密来加密数据,从而保护数据在客户端和服务器之间传输过程中的隐私和完整性。因此,有时候在获取网站的request的时候,在header/data,甚至是网址的构建的时候也会用到

import hashlib #导入hash库函数

def hash_UTF8(text): #基于UTF-8生成的md5加密

'''ASCII编码:一个字节一共可以用来表示256种不同的状态

UTF-8是Unicode的实现方式之一 ,对应的编码是 \u9996\ 这种

UTF8的BOM头为 0xEF 0xBB 0xBF

Unicode大端模式为 0xFE 0xFF

Unicode小端模式为 0xFF 0xFE

'''

md5_result= hashlib.md5(text.encode(encoding='UTF-8')).hexdigest()code>

return md5_result

print(hash_UTF8('虚拟机柯尼卡')) #0c9a8ebe776ce41b1017e613a2d980cf

def hash_GBK(text):#基于GBK生成的md5加密

''' GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准 兼容汉字、图形等的编码 '''

md5_result= hashlib.md5(text.encode(encoding='GBK')).hexdigest()code>

return md5_result

print(hash_GBK('虚拟机柯尼卡」 Ⅷ Ⅸ 『 』 〖 〗 【 】 £ ‰ § № ☆ ★ △ ▲ ※ → ← ↑')) #70ad1b56a830a421d1740e37e6ebfe90

def hash_GB2312(text): #基于GB2312生成的md5加密 汉字编码标准

'''非ASCII编码 基于区位码 的汉字编码标准,一般编码方式是:0xA0+区号,0xA0+位号。 '''

md5_result= hashlib.md5(text.encode(encoding='GB2312')).hexdigest()code>

return md5_result

print(hash_GB2312('0xB0 0xB2')) #6ef23e84a2a6d9af087fc6f38425930c

def hash_GB18030(text):#基于GB18030生成的md5加密

''' GB18030是对GB2312的扩展,其编码长度由2个字节变为1~4个字节 '''

md5_result= hashlib.md5(text.encode(encoding='GB18030')).hexdigest()code>

return md5_result

print(hash_GB18030('∈(0142)')) #b79d04b89ebe2b4e7767388ba3b7d71f

基于UUID编码生成随机数

import uuid #通用唯一识别码

def UUID_time():

'''基于时间戳 '''

return uuid.uuid1()

print(UUID_time()) #0fe9a715-f58b-11ee-92df-244bfe9a3ddd

def uuid3(text):

'''uuid3() 基于名字和MD5散列值,保证了同一命名空间中不同名字的唯一性 '''

return uuid.uuid3(uuid.NAMESPACE_DNS,text)

print(uuid3('木卡姆0xBB')) #e7860c98-4ef8-30de-8adc-eebce41612a0

def uuid4():

'''基于随机数,会重复。不常用 '''

return uuid.uuid4()

print(uuid4()) #6467f0d7-1f49-4963-9a57-c6dfee8d2713

#重复概率:2的128次方 分之一,概率也很小

def uuid5(text):

'''基于名字和SAHI值,使用SAHI算法 若有名字的唯一性要求,最好使用uuid3()或者uuid5()'''

return uuid.uuid5(uuid.NAMESPACE_OID,text)

生成随机字符串

import random

import string

def randN(N):

'''生成长度为 N的以串随机数 '''

min = pow(10, N - 1)

max = pow(10, N)

return random.randint(min, max - 1)

print( randN(5))

#最后的结果是:“49846” ,数值是随机的,可以生成目标长度的数字。

def generate_random_string(length):

'''生成32位的随机字符串,字母和数字都可以 '''

characters = string.ascii_letters + string.digits

return ''.join(random.choice(characters) for _ in range(length))

这些方法可以单独使用,也可以组合使用,以满足不同的随机性需求。例如,如果你需要生成一个随机的密码,你可以结合使用random.randint和random.choice来生成一个包含数字和字母的字符串。

3.随机生成dataframe

import numpy as np

import random

new=np.random.randint(0,100, size=[10,10])#从100个数内选出10列10行的随机数,但是会重复

new=np.random.choice(100, size=[10,10], replace=False)#从100个数内选出10列10行的随机数,不会重复

print(new)

4. 随机生成队列

def No_Repeat_Queue(N,start,end):

'''生成从start-end的不重复队列,数字长度为N个数,最后返回的是集合,用{}表示 '''

random_numbers = set()

while len(random_numbers) < N:

number = random.randint(start, end)

random_numbers.add(number)

return random_numbers

print(No_Repeat_Queue(10,-1,25))

5. 随机生成列表

如果是想生成顺序乱的数组,可以使用random.sample()生成不重复的列表:

def No_Repeat_numbers(N,start,end):

'''生成长度为N,从start-end 中选出的 列表 '''

No_Repeat_num= random.sample(range(start, end), N)

return No_Repeat_num

print(No_Repeat_numbers(10,1,101))

#选出从1-101的十个数

结果:[7, 16, 47, 4, 19, 18, 25, 62, 61, 58]



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。