Python第八天:哈希表笔记以及题目整理
1. 哈希表的核心思想哈希表Hash Table是一种根据关键码key的值直接进行访问的数据结构其主要作用是快速判断一个元素是否出现在集合中。核心思想在关键码key和存储位置之间建立一个确定的对应关系f使得每个关键字 key 对应一个唯一的存储位置。2. 哈希表的直观比喻可以将哈希表想象成一个大抽屉这个大抽屉里面有很多小格子每个格子可以用来存放数据。抽屉编号key通过这个 key 可以找到对应的抽屉散列函数Hash Function将数据的名字key转换成一个数字然后根据这个数字来选择对应的抽屉抽屉里的物品实际存储的数据快速查找通过名字key可以快速地找到对应的抽屉3. 哈希表的数据结构选择在解决问题时哈希表一般选择以下三种数据结构数组列表集合映射4. 哈希冲突与解决哈希冲突不同的 key 经过散列函数可能得到相同的数字即映射到同一个抽屉解决冲突的方法开放地址法链地址法再哈希法建立公共溢出区5. 哈希表的优势快速查找平均时间复杂度 O(1)直接访问通过 key 可以直接定位到存储位置避免重复比较不需要像线性查找那样逐个比较6. 应用场景快速查找元素是否存在数据去重缓存实现字典/映射关系存储统计频率7. 实现要点# 简单哈希表示例classSimpleHashTable:def__init__(self,size10):self.sizesize self.table[[]for_inrange(size)]# 使用链地址法解决冲突defhash_function(self,key):简单的散列函数returnhash(key)%self.sizedefinsert(self,key,value):插入键值对indexself.hash_function(key)self.table[index].append((key,value))defsearch(self,key):查找键对应的值indexself.hash_function(key)fork,vinself.table[index]:ifkkey:returnvreturnNone8. 注意事项散列函数设计好的散列函数应该均匀分布减少冲突负载因子存储元素数量与哈希表大小的比值影响性能冲突处理选择合适的冲突解决方法动态扩容当负载因子过高时需要考虑扩容总结哈希表通过建立 key 到存储位置的直接映射关系实现了快速的数据访问和查找是计算机科学中非常重要的数据结构之一。9. 实践示例统计字符串中出现次数最多的字母下面是一个统计字符串中出现次数最多的字母的Python示例以及常见的错误分析# 读取一个整数 n表示接下来有 n 行字符串要处理nint(input())# 循环 n 次每次处理一行字符串foriinrange(n):# 读取当前行的字符串题目保证只含小写字母但为了安全我们后面过滤sinput()# 创建一个长度为 26 的列表用来记录 a~z 每个字母出现的次数# 26 * [0] 和 [0] * 26 效果相同都是生成包含 26 个 0 的列表count26*[0]# 遍历字符串中的每一个字符forcharins:# 只处理小写字母避免空格、数字、大写字母等干扰ifacharz:# 计算当前字母在 count 列表中的索引a-0, b-1, ..., z-25idxord(char)-ord(a)# 该字母出现次数加 1count[idx]1# 开始查找出现次数最多的字母max_freq0# 当前最大出现次数初始为 0max_idx-1# 当前最大次数对应的字母索引-1 表示尚未找到# 遍历 26 个字母的计数forminrange(26):ifcount[m]max_freq:# 发现更大的出现次数更新最大值和对应索引max_freqcount[m]max_idxm# 注意这里用的是 而不是 所以当次数相同时不会更新# 这样就会保留索引较小的字母也就是字母顺序更小的那个符合题目默认要求# 将索引转换回对应的字母# ord(a) max_idx 得到该字母的 Unicode 编码chr() 将其转成字符resultchr(ord(a)max_idx)# 输出这一行的结果print(result)常见错误分析错误①range(s) 使用字符串作为参数错误代码forjinrange(s):报错TypeError: str object cannot be interpreted as an integer原因range()函数只接受整数参数而s是字符串类型。正确做法想遍历字符串的每个字符可以直接用for char in s:或者用for i in range(len(s)):再通过索引取字符。错误②把变量名写成字符串字面量错误代码chord(char)-ord(a)报错TypeError: ord() expected a character, but string of length 4 found原因char是一个长度为 4 的字符串由 c、h、a、r 四个字符组成而ord()函数要求传入单个字符。你本意是用循环变量char却误加了引号变成了固定字符串。正确做法变量名不能加引号应写成ord(char)。哈希思想在本例中的应用这个例子实际上使用了哈希思想哈希函数ord(char) - ord(a)将字母映射到 0-25 的索引直接访问通过索引直接访问count数组中的对应位置快速统计时间复杂度为 O(n)其中 n 是字符串长度这种方法比使用字典Python 内置的哈希表实现更高效因为数组的访问速度更快且空间固定为 26。

相关新闻

从零写一个工控多协议通讯库(一):架构与取舍

从零写一个工控多协议通讯库(一):架构与取舍

📌 本文首发于我的个人博客 talkplc.com,同步发布于 CSDN。原文链接:https://talkplc.com/2026/07/18/talkplc-architecture/ 上一篇把 Modbus 一帧报文逐字节拆开讲了。这一篇往上走一层:与其每个项目都重写一遍 Modbus/西门子/三…

2026/10/13 6:24:10 阅读更多 →
PSWinReportingV2 vs 传统日志工具:为什么它是AD事件监控的最佳选择?

PSWinReportingV2 vs 传统日志工具:为什么它是AD事件监控的最佳选择?

PSWinReportingV2 vs 传统日志工具:为什么它是AD事件监控的最佳选择? 【免费下载链接】PSWinReporting This PowerShell Module has multiple functionalities, but one of the signature features of this module is the ability to parse Security log…

2026/10/3 13:09:47 阅读更多 →
为什么你的AI音乐永远赚不到钱?——3大隐性变现断点曝光,错过本周将涨价

为什么你的AI音乐永远赚不到钱?——3大隐性变现断点曝光,错过本周将涨价

更多请点击: https://codechina.net 第一章:为什么你的AI音乐永远赚不到钱?——3大隐性变现断点曝光,错过本周将涨价 你精心训练的LoRA模型能生成媲美Billboard前10的旋律,但上架Bandcamp三个月零订单;你用…

2026/10/12 20:12:49 阅读更多 →

最新新闻

VCU整车控制器Simulink源码深度拆解:架构、算法与工程落地

VCU整车控制器Simulink源码深度拆解:架构、算法与工程落地

做新能源三电这行,很多人对“VCU整车控制器”是既熟悉又陌生。熟悉是因为它几乎是纯电、混动、增程构型里绕不开的顶层控制器,陌生是因为真正的工程源码很难见到,网上的资料要么是论文里的原理框图,要么是教学级别的简化模型。最近…

2026/10/13 6:23:46 阅读更多 →
一张图15秒带货视频:Claude Code本地合成全链路实战

一张图15秒带货视频:Claude Code本地合成全链路实战

1. 一张随手拍凭什么能撑起一条带货视频很多人第一次听到"一张照片做15秒带货视频"的反应是:这不就是拿张图配个音乐,然后硬凑时长吗?我一开始也这么想,直到自己真正跑通整条链路,才发现这里面能玩的花样比想…

2026/10/13 6:23:46 阅读更多 →
agent-skills 实战:构建大模型智能体的技能注册、调用与编排体系

agent-skills 实战:构建大模型智能体的技能注册、调用与编排体系

最近我在折腾智能体开发时,被一个高频问题反复卡住:模型本身挺聪明,一让它干具体活儿就各种掉链子。要么不知道该调用哪个工具,要么把参数传得乱七八糟,要么只回复“我可以帮你处理”然后就没有然后了。后来我意识到&a…

2026/10/13 6:23:46 阅读更多 →
Leetcode hot100 颜色分类【中等】

Leetcode hot100 颜色分类【中等】

看懂题目后,直觉是 —— new一个一样大小的数组,遍历一遍原数组,数出来0、1、2的个数,然后按照个数直接写入新数组。但题目要求在原地弄,也就是不能通过我们这样拷贝的方式。并且进阶要求只遍历一遍。空间限制我们&…

2026/10/13 6:23:46 阅读更多 →
图像预处理实战指南:从几何变换到工程落地的全流程避坑

图像预处理实战指南:从几何变换到工程落地的全流程避坑

图像预处理这个环节,说它是整个视觉任务里最不起眼、却最容易决定成败的一步,一点都不夸张。我做过不少图像相关的项目,从分类、检测到分割,也帮人排查过不少"模型明明没问题但效果就是上不去"的案例,最后追…

2026/10/13 6:23:46 阅读更多 →
多智能体协作系统实战:架构设计与落地经验

多智能体协作系统实战:架构设计与落地经验

1. 从单兵作战到团队协同:为什么我们需要重新思考开发模式做过几年开发的人都有一个共同感受:项目越做越大,代码越写越多,但真正让人头疼的往往不是某个技术难点,而是协作本身。需求在变、接口在变、文档永远滞后于代码…

2026/10/13 6:22:46 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →