Python – 余数分布|Hash(python中求余数的符号)
off999 2024-10-07 12:10 20 浏览 0 评论
这篇文章主要是在计算LeetCode-706设计哈希映射时,碰到关于计算余数的问题,用seaborn夈表观察一下质数的余数分布情况。
会涉及以下几方面内容:
- 质数和余数
- Seaborn绘制swarmplot和lineplot
- Pandas的pivot_table的计算
在数据处理的一些敏感信息,我用xxxxxx进行了替代,但不影响整理代码阅读
主要参考的相关网站有以下几个:
- https://seaborn.pydata.org/tutorial/function_overview.html
1. LeetCode题解
#------------------------LeetCode-706|设计哈希映射---------------------------
"""
用一个大质数将key取余,将数据分成不同bucket;
分bucket将[key,value]记入列表;再进行相应操作;
"""
class MyHashMap2:
#用余数进行bucket分类,分别获取hash.table的内容
#用较大质数,将数据平均分布在bucket中
def __init__(self):
#定义初始化hash.table
self.prime=1093 #定义一个质数
self.table=[[] for _ in range(self.prime)] #初始化hash.table
def put(self, key: int, value: int) -> None:
#分两种情况:1.原key存在,更新值;2.原key不存在,添加值
bucket=key%self.prime #余数,表示bucket区域
for item in self.table[bucket]: #key存在
if item[0]==key:
item[1]=value
return #return跳出put功能
self.table[bucket].append([key,value]) #key不存在,添加值
def get(self, key: int) -> int:
#1.key存在,返回value;2.key不存在,返回-1
bucket=key%self.prime #余数,表示bucket区域
for idx,val in self.table[bucket]: #key存在
if idx==key:
return val
return -1
def remove(self, key: int) -> None:
bucket=key%self.prime #余数,表示bucket区域
for idx,item in enumerate(self.table[bucket]): #key存在bucket
if item[0]==key:
self.table[bucket].pop(idx)
1. 质数的余数分布
"""
在做LeetCode-706设计哈希映射的时候,在处理余数时;
想观察一下不质数和合数在处理余数时的分布
prime table/质数表 <1000
primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
"""
import os
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
path=r'C:\Users\02279074\OneDrive - Elanco\Lilly_OneDrive\C\TZ\Algorithm'
# --------------generate data-----------------------
# prime table/质数表 <100
#primes=[ 3, 13, 23, 43,53] #选取一些质数
primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
nums=pd.Series(np.random.randint(1,100,size=500)) #n个随机整数
# nums=pd.Series(np.arange(1,101,step=1)) #生成数列
dfList=[]
for prime in primes:
df=pd.DataFrame([nums,nums%prime]).T #生成余数表
df['type']='prime-'+str(prime)
dfList.append(df)
dfs=pd.concat(dfList) #合并成一个df
dfs.columns=['nums','remain','type']
# -------------generate pivot_table------------------
pvt=pd.pivot_table(dfs,
index='remain',
columns='type',
values='nums',
aggfunc='count',
fill_value=0)
output_f=os.path.join(path,'remind_distribution.xlsx')
with pd.ExcelWriter(output_f) as writer:
dfs.to_excel(writer,sheet_name='table',index=True)
pvt.to_excel(writer,sheet_name='pvt',index=True)
# ----------------扰动图--------------------------
#fig为画布,ax为子图对象
fig,ax=plt.subplots(figsize=(12,8),dpi=120) #图表布局
ax=sns.swarmplot(data=dfs, #数据
x="remain",
y="nums",
hue="type", #分类
# jitter=0.25, #抖动幅度
)
plt.grid(True) #添加网格线
file1=os.path.join(path,'swarmplot.png')
plt.savefig(file1)
plt.close()
# ----------------柱状图--------------------------
#fig为画布,ax为子图对象
fig,ax=plt.subplots(figsize=(12,8),dpi=120) #图表布局
ax=sns.lineplot(data=pvt,
)
xlabels=[int(x) for x in ax.get_xticks()] #x轴整数
ax.set_xticklabels(xlabels)
plt.grid(True) #添加网格线
file2=os.path.join(path,'lineplot.png')
plt.savefig(file2)
plt.close()
print("all done".center(50,"*"))
生成两个图形:
1.扰动图swarmplot: x轴为余数,y轴为随机数;
2.线形图lineplot: x轴为余数,y轴为余数的计数和;
观察lineplot可以看到,随着prime的值不变增加,每个余数remain的计数和更加趋于平均;就这表示质数越大,分布在余数上的值就更平均。
相关推荐
- 使用 python-fire 快速构建 CLI_如何搭建python项目架构
-
命令行应用程序是开发人员最好的朋友。想快速完成某事?只需敲击几下键盘,您就已经拥有了想要的东西。Python是许多开发人员在需要快速组合某些东西时选择的第一语言。但是我们拼凑起来的东西在大多数时候并...
- Python 闭包:从底层逻辑到实战避坑,附安全防护指南
-
一、闭包到底是什么?你可以把闭包理解成一个"带记忆的函数"。它诞生时会悄悄记下自己周围的变量,哪怕跑到别的地方执行,这些"记忆"也不会丢失。就像有人出门时总会带上...
- 使用Python实现九九乘法表的打印_用python打印一个九九乘法表
-
任务要求九九乘法表的结构如下:1×1=11×2=22×2=41×3=32×3=63×3=9...1×9=92×9=18...9×9=81使用Python编写程序,按照上述格式打印出完整的九...
- 吊打面试官(四)--Java语法基础运算符一文全掌握
-
简介本文介绍了Java运算符相关知识,包含运算规则,运算符使用经验,特殊运算符注意事项等,全文5400字。熟悉了这些内容,在运算符这块就可以吊打面试官了。Java运算符的规则与特性1.贪心规则(Ma...
- Python三目运算基础与进阶_python三目运算符判断三个变量
-
#头条创作挑战赛#Python中你学会了三步运算,你将会省去很多无用的代码,我接下来由基础到进阶的方式讲解Python三目运算基础在Python中,三目运算符也称为条件表达式。它可以通过一行代码实现条...
- Python 中 必须掌握的 20 个核心函数——set()详解
-
set()是Python中用于创建集合的核心函数,集合是一种无序、不重复元素的容器,非常适合用于成员检测、去重和数学集合运算。一、set()的基本用法1.1创建空集合#创建空集合empty_se...
- 15个让Python编码效率翻倍的实用技巧
-
在软件开发领域,代码质量往往比代码数量更重要。本文整理的15个Python编码技巧,源自开发者在真实项目中验证过的工作方法,能够帮助您用更简洁的代码实现更清晰的逻辑。这些技巧覆盖基础语法优化到高级特性...
- 《Python从小白到入门》自学课程目录汇总(和猫妹学Python)
-
小朋友们好,大朋友们好!不知不觉,这套猫妹自学Python基础课程已经结束了,猫妹体会到了水滴石穿的力量。水一直向下滴,时间长了能把石头滴穿。只要坚持不懈,细微之力也能做出很难办的事。就比如咱们的学习...
- 8÷2(2+2) 等于1还是16?国外网友为这道小学数学题吵疯了……
-
近日,国外网友因为一道小学数学题在推特上争得热火朝天。事情的起因是一个推特网友@pjmdoll发布了一条推文,让他的关注者解答一道数学题:Viralmathequationshavebeen...
- Python学不会来打我(21)python表达式知识点汇总
-
在Python中,表达式是由变量、运算符、函数调用等组合而成的语句,用于产生值或执行特定操作。以下是对Python中常见表达式的详细讲解:1.1算术表达式涉及数学运算的表达式。例如:a=5b...
- Python运算符:数学助手,轻松拿咧
-
Python中的运算符就像是生活中的数学助手,帮助我们快速准确地完成这些计算。比如购物时计算总价、做家务时分配任务等。这篇文章就来详细聊聊Python中的各种运算符,并通过实际代码示例帮助你更好地理解...
- Python学不会来打我(17)逻辑运算符的使用方法与使用场景
-
在Python编程中,逻辑运算符(LogicalOperators)是用于组合多个条件表达式的关键工具。它们可以将多个布尔表达式连接起来,形成更复杂的判断逻辑,并返回一个布尔值(True或Fa...
- Python编程基础:运算符的优先级_python中的运算符优先级问题
-
多个运算符同时出现在一个表达式中时,先执行哪个,后执行哪个,这就涉及运算符的优先级。如数学表达式,有+、-、×、÷、()等,优先级顺序是()、×、÷、+、-,如5+(5-3)×4÷2,先计算(5-3)...
- Python运算符与表达式_python中运算符&的功能
-
一、运算符分类总览1.Python运算符全景图2.运算符优先级表表1.3.1Python运算符优先级(从高到低)优先级运算符描述结合性1**指数右→左2~+-位非/一元加减右→左3*//...
- Python操作Excel:从基础到高级的深度实践
-
Python凭借其丰富的库生态系统,已成为自动化处理Excel数据的强大工具。本文将深入探讨五个关键领域,通过实际代码示例展示如何利用Python进行高效的Excel操作,涵盖数据处理、格式控制、可视...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 使用 python-fire 快速构建 CLI_如何搭建python项目架构
- Python 闭包:从底层逻辑到实战避坑,附安全防护指南
- 使用Python实现九九乘法表的打印_用python打印一个九九乘法表
- 吊打面试官(四)--Java语法基础运算符一文全掌握
- Python三目运算基础与进阶_python三目运算符判断三个变量
- Python 中 必须掌握的 20 个核心函数——set()详解
- 15个让Python编码效率翻倍的实用技巧
- 《Python从小白到入门》自学课程目录汇总(和猫妹学Python)
- 8÷2(2+2) 等于1还是16?国外网友为这道小学数学题吵疯了……
- Python学不会来打我(21)python表达式知识点汇总
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)