【Python的随机数汇总】

​我们写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)。

以下是代码运行的部分:

python 复制代码
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,方便做数据库的管理

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

可以使用的场景:

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

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

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

python 复制代码
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()
    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()
    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()
    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()
    return md5_result

print(hash_GB18030('∈(0142)')) #b79d04b89ebe2b4e7767388ba3b7d71f
  1. 基于UUID编码生成随机数
python 复制代码
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)
  1. 生成随机字符串
python 复制代码
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

python 复制代码
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. 随机生成队列

python 复制代码
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()生成不重复的列表:

python 复制代码
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]
相关推荐
爱上电路设计3 小时前
有趣的算法
开发语言·c++·算法
studyForMokey3 小时前
kotlin 函数类型接口lambda写法
android·开发语言·kotlin
2401_858120264 小时前
探索sklearn文本向量化:从词袋到深度学习的转变
开发语言·python·机器学习
与墨学长5 小时前
Rust破界:前端革新与Vite重构的深度透视(中)
开发语言·前端·rust·前端框架·wasm
虫小宝5 小时前
Java中的软件架构重构与升级策略
java·开发语言·重构
bigbearxyz5 小时前
Java实现图片的垂直方向拼接
java·windows·python
CTGU_daffodil5 小时前
matlab 绘制高等数学中的二维函数示例
开发语言·matlab
立秋67895 小时前
使用Python绘制堆积柱形图
开发语言·python
逸群不凡6 小时前
C++|哈希应用->布隆过滤器
开发语言·数据结构·c++·算法·哈希算法
jOkerSdl6 小时前
第三十章 方法大全(Python)
python