首页 > Python资料 博客日记
【Python】随机数汇总(全!!!)
2024-10-28 02:00:06Python资料围观44次
我们写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)。
以下是代码运行的部分:
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()
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
- 基于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]
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj