发布时间:2026/8/12 20:51:36
python学习8 之 【集合、datetime模块、字典】 目录1.集合1.1.集合的特点1.2.集合的创建1.3.基本操作1.4.集合运算1.5.集合关系判断1.6.frozenset2.datetime 模块2.1.主要类3.字典3.2.基础操作3.3.视图和遍历视图对象3.4.字典操作3.5.创建和转换3.6.字典比较3.7.字典排序输出3.8.常用模式速查1.集合集合是 Python 中的一种无序、可变的数据结构用于存储不重复的元素集合基于哈希表实现查找效率极高多用于去重1.1.集合的特点特性说明无序性元素无固定位置不支持索引访问唯一性自动去重不允许重复元素可变性可增删元素但元素本身必须可哈希元素限制只能包含不可变类型数字、字符串、元组等不支持索引和切片等序列操作1.2.集合的创建创建方式语法/函数说明示例结果花括号直接创建{元素1, 元素2, ...}直接使用花括号包含元素{apple, banana, orange}{apple, banana, orange}set()构造函数set(iterable)从可迭代对象创建集合自动去重set([1, 2, 3, 3, 4]){1, 2, 3, 4}字符串转集合set(string)将字符串的每个字符作为元素set(hello){h, e, l, o}元组转集合set(tuple)将元组转换为集合set((1, 2, 3)){1, 2, 3}范围转集合set(range())将 range 对象转换为集合set(range(5)){0, 1, 2, 3, 4}创建空集合set()必须用 set(){}是空字典empty_set set()set()集合推导式{表达式 for 变量 in 可迭代对象}类似列表推导式生成集合{x**2 for x in range(5)}{0, 1, 4, 9, 16}带条件的集合推导式{表达式 for 变量 in 可迭代对象 if 条件}筛选元素后生成集合{x for x in range(10) if x % 2 0}{0, 2, 4, 6, 8}1.3.基本操作添加和删除元素方法说明示例返回值add(x)添加单个元素s.add(5)Noneupdate(iterable)添加多个元素可迭代对象s.update([5,6,7])Noneremove(x)删除元素不存在时抛出KeyErrors.remove(3)Nonediscard(x)删除元素不存在时不报错s.discard(10)Nonepop()随机弹出并返回一个元素集合为空时抛出KeyErroritem s.pop()被弹出的元素clear()清空集合s.clear()None随机存储成员检查操作说明示例返回值x in s检查元素是否在集合中3 in {1,2,3}True/Falsex not in s检查元素是否不在集合中5 not in {1,2,3}True/False遍历集合操作说明示例返回值for x in s遍历集合中的每个元素for item in {1,2,3}: print(item)None执行循环enumerate(s)同时获取索引和元素for i, item in enumerate(s):迭代器复制import copy # 集合中包含可变元素如列表但注意集合本身不能包含列表因为列表不可哈希 # 更实际的例子集合中包含元组元组内包含可变对象 s1 {(1, [2, 3]), (4, [5, 6])} # 浅拷贝 s2 s1.copy() # 深拷贝 s3 copy.deepcopy(s1) # 修改原集合中的可变对象 for item in s1: item[1].append(99) break print(s1) # {(1, [2, 3, 99]), (4, [5, 6])} print(s2) # {(4, [5, 6]), (1, [2, 3, 99])} - 受影响 print(s3) # {(4, [5, 6]), (1, [2, 3])} - 不受影响集合自带 copy() 方法浅拷贝没有自带深拷贝需要使用 copy.deepcopy()由于集合元素必须是可哈希的不可变常见集合元素都是不可变的所以大多数情况下浅拷贝就足够使用s2 s1是拷贝引用任意改变都会影响对方1.4.集合运算返回新集合不修改原集合运算运算符方法说明示例返回值交集intersection(other, ...)同时存在于两个集合的元素a b新集合并集|union(other, ...)存在于任一集合的元素a | b新集合差集-difference(other, ...)在 a 中但不在 b 中的元素a - b新集合对称差^symmetric_difference(other)只存在于其中一个集合的元素a ^ b新集合a、b必须都是集合other只要是可迭代对象即可原地修改集合返回 None方法说明示例返回值intersection_update(other, ...)原地更新为交集a.intersection_update(b)Noneupdate(other, ...)原地更新为并集a.update(b)Nonedifference_update(other, ...)原地更新为差集a.difference_update(b)Nonesymmetric_difference_update(other)原地更新为对称差a.symmetric_difference_update(b)Noneother只要是可迭代对象即可1.5.集合关系判断关系类型运算符方法说明示例返回值子集issubset(other)判断当前集合的所有元素是否都在另一个集合中{1, 2} {1, 2, 3}True真子集无可用issubset加长度判断判断是否为子集且两个集合不相等{1, 2} {1, 2, 3}True超集issuperset(other)判断当前集合是否包含另一个集合的所有元素{1, 2, 3} {1, 2}True真超集无可用issuperset加长度判断判断是否为超集且两个集合不相等{1, 2, 3} {1, 2}True不相交无isdisjoint(other)判断两个集合是否有交集无共同元素{1, 2}.isdisjoint({3, 4})True1.6.frozensetfrozenset 是 Python 内置的不可变集合类型一旦创建就无法修改它与普通 set 的关系类似于 tuple 与 list 的关系frozenset 与 set 对比特性setfrozenset可变性可变可增删元素不可变创建后无法修改可哈希性不可哈希可哈希作为字典键不允许允许作为集合元素不允许允许集合运算支持支持修改方法add/remove/discard/pop 等仅有查询类方法创建方法创建方式语法示例结果从可迭代对象创建frozenset(iterable)frozenset([1,2,3])frozenset({1,2,3})从字符串创建frozenset(string)frozenset(hello)frozenset({h,e,l,o})从集合创建frozenset(set)frozenset({1,2,3})frozenset({1,2,3})空 frozensetfrozenset()frozenset()frozenset()从字典创建frozenset(dict)frozenset({a:1})frozenset({a})只用键查询与检查方法方法语法说明返回值示例len()len(fs)获取元素个数intlen(frozenset({1,2,3}))→3inx in fs检查元素是否在集合中bool2 in frozenset({1,2,3})→Truenot inx not in fs检查元素是否不在集合中bool4 not in frozenset({1,2,3})→True集合运算方法返回新 frozenset方法运算符说明示例结果intersection()交集fs1.intersection(fs2)两个集合的公共元素union()|并集fs1.union(fs2)两个集合的所有元素difference()-差集fs1.difference(fs2)在 fs1 但不在 fs2 的元素symmetric_difference()^对称差fs1.symmetric_difference(fs2)仅在其中一个集合的元素issubset()是否为子集fs1.issubset(fs2)fs1 的所有元素是否都在 fs2 中issuperset()是否为超集fs1.issuperset(fs2)fs1 是否包含 fs2 的所有元素isdisjoint()无是否不相交fs1.isdisjoint(fs2)两个集合无交集返回 True2.datetime 模块datetime 模块是 Python 标准库中用于处理日期和时间的核心模块该模块支持从公元 1 年到 9999 年的日期范围精度可以达到微秒级2.1.主要类类名描述datetime包含日期和时间年、月、日、时、分、秒、微秒date只包含日期年、月、日time只包含时间时、分、秒、微秒、时区信息timedelta表示两个日期或时间之间的差值tzinfo时区信息的抽象基类timezonePython 3.2 新增实现tzinfo的简单时区类2.2.使用参考博客https://blog.csdn.net/tomatop/article/details/158915909?ops_request_miscrequest_idbiz_id102utm_termpython%E6%97%B6%E9%97%B4%E7%B1%BButm_mediumdistribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-158915909.142^v102^pc_search_result_base5spm1018.2226.3001.41873.字典字典以键值对的形式存储数据3.1.字典的特性无序性Python 3.7 字典保持插入顺序但本质上是无序集合可变性可以动态增删改元素键唯一性键必须唯一值可以重复值可为任意类型可重复键必须可哈希键必须是不可变类型字符串、数字、元组、frozenset等3.2.基础操作1和1.0被视作同一个键键相同时后面的键值对会覆盖前面的键值对方法/操作语法描述示例创建字典d {}d dict()创建空字典{a: 1}访问值d[key]获取键对应的值键不存在抛出 KeyErrord[name]安全访问d.get(key, default)获取值键不存在返回默认值Noned.get(age, 0)设置默认值d.setdefault(key, default)键存在返回值不存在则设置并返回默认值Noned.setdefault(count, 0)添加/修改d[key] value添加或更新键值对d[age] 25删除键del d[key]删除指定键键不存在抛出 KeyErrordel d[age]删除并返回d.pop(key, default)删除键并返回值键不存在返回默认值None未设置默认值且键不存在则抛出异常value d.pop(age, 0)删除最后一项d.popitem()删除并返回最后插入的键值对字典为空时调用会抛出异常k, v d.popitem()清空字典d.clear()删除所有键值对d.clear()3.3.视图和遍历方法/操作语法描述示例获取所有键d.keys()返回所有键的视图对象for k in d.keys():获取所有值d.values()返回所有值的视图对象for v in d.values():获取键值对d.items()返回所有键值对的视图对象for k, v in d.items():长度len(d)返回键值对数量count len(d)成员检查key in d检查键是否存在if name in d:成员检查值value in d.values()检查值是否存在if 25 in d.values():视图对象视图对象是Python中一种动态的、只读的集合-like对象它不复制数据而是直接引用原字典的内部数据特点1动态更新视图对象会实时反映原字典的变化d {a: 1, b: 2} keys d.keys() print(keys) # dict_keys([a, b]) # 修改原字典 d[c] 3 print(keys) # dict_keys([a, b, c]) ← 自动更新了2支持集合操作dict_keys 和 dict_items 支持高效的集合运算d1 {a: 1, b: 2, c: 3} d2 {b: 2, c: 3, d: 4} # 交集共同键 common_keys d1.keys() d2.keys() # {b, c} # 差集d1有但d2没有 diff_keys d1.keys() - d2.keys() # {a} # 并集 union_keys d1.keys() | d2.keys() # {a, b, c, d}3可迭代可以直接用于循环无需转换成列表d {name: Alice, age: 25} # 直接迭代视图对象高效 for k in d.keys(): print(k) # 不需要写for k in list(d.keys())3.4.字典操作方法/操作语法描述示例合并更新原地修改返回Noned.update(other_dict)用另一个字典更新当前字典覆盖原有键d.update({age: 26})合并Python 3.5{**d1, **d2}合并两个字典返回新字典merged {**d1, **d2}合并Python 3.9d1 | d2合并返回新字典merged d1 | d2原地合并3.9d1 | d2将 d2 合并到 d1d1 | d2浅拷贝d.copy()返回字典的浅拷贝d2 d1.copy()浅拷贝dict(d)通过构造函数拷贝d2 dict(d1)深拷贝copy.deepcopy(d)返回字典的深拷贝import copy; d2 copy.deepcopy(d1)d.update(other)中的other是可迭代对象以下皆可字典元素是成对出现的元组的列表zip以及类似于关键字创建字典的方式str(dict)即 字典字面值3.5.创建和转换方法/操作语法描述示例从键创建dict.fromkeys(seq, value)从序列创建字典值默认为 Nonedict.fromkeys([a,b], 0)字典推导式{k: v for ...}使用推导式创建字典{x: x**2 for x in range(5)}列表转字典dict(zip(keys, values))两个列表组合成字典dict(zip([a,b], [1,2]))defaultdictdefaultdict(default_factory)带默认值的字典from collections import defaultdictOrderedDictOrderedDict()有序字典已内置顺序from collections import OrderedDictCounterCounter(iterable)计数器字典from collections import Counter键值名赋值创建mydict3 dict (name 张三, age 19genderM)包含两个元素的序列创建mydict3 dict([(name, 张三(age’19(gender’M)])二元创建my_dict4 dict([(name,张三),(age,19),(gender,M)])3.6.字典比较操作描述示例d1 d2比较两个字典是否相等{a:1} {a:1}→Trued1 ! d2比较两个字典是否不等{a:1} ! {b:2}→True3.7.字典排序输出场景方法示例返回值类型按键排序sorted(d.items())sorted({b:2, a:1}.items())→[(a,1), (b,2)]元组列表按键降序sorted(d.items(), reverseTrue)sorted({a:1, b:2}.items(), reverseTrue)→[(b,2), (a,1)]元组列表按值排序sorted(d.items(), keylambda x: x[1])sorted({a:3, b:1}.items(), keylambda x: x[1])→[(b,1), (a,3)]元组列表按值降序sorted(d.items(), keylambda x: x[1], reverseTrue)sorted({a:3, b:1}.items(), keylambda x: x[1], reverseTrue)→[(a,3), (b,1)]元组列表只要排序后的键sorted(d)或sorted(d.keys())sorted({b:2, a:1})→[a,b]列表只要排序后的值sorted(d.values())sorted({a:3, b:1}.values())→[1, 3]列表转回字典dict(sorted(d.items(), keylambda x: x[1]))用按值排序的结果构造新字典字典3.8.常用模式速查场景代码示例安全获取值value d.get(key, default)计数统计count d.get(key, 0) 1或使用Counter分组groups[key].append(value)配合defaultdict(list)交换键值{v: k for k, v in d.items()}过滤字典{k: v for k, v in d.items() if condition}默认字典from collections import defaultdictd defaultdict(int)带默认值的 getd {}\nd[new] d.get(new, 0) 1安全删除value d.pop(key, None)合并字典{**d1, **d2}或d1 | d2(3.9)列表转字典dict(zip(key_list, value_list))

相关新闻

2026/8/12 20:51:36

上海jsp网站建设:从入门到精通,揭秘高端企业官网背后的技术逻辑与用户体验优化策略

在如今的互联网时代,企业官方网站早已不再是简单的“网上名片”,而是品牌实力的延伸、业务转化的核心引擎以及客户信任的基石。特别是在上海这样一座国际化大都市,竞争尤为激烈,企业对于网站的要求也呈现出前所未有的高标准。提到网站开发技术,很多人首先想到的是WordPres…

2026/8/12 20:46:35

VC6.0完整绿色版部署指南:解决兼容性问题,搭建经典开发环境

1. 项目概述与核心价值 Visual C 6.0,一个在开发者圈子里堪称“活化石”的IDE。即便在今天,当我和一些从事工业控制、嵌入式底层开发或者维护上古遗留代码库的老同事聊天时,VC6.0这个名字依然会频繁出现。你可能会好奇,在Visual S…

2026/8/12 23:07:17

怡康医药网站建设方案:打造可信专业的线上医疗健康服务平台

咱们今天不聊那些虚头巴脑的大词,就实实在在地聊聊,作为一家扎根社区、服务百姓的医药连锁品牌,“怡康医药”在当下这个数字化浪潮里,到底该怎么把自己的网站建好。很多人一听到“网站建设”,脑子里浮现的可能就是几个好看的网页模板,点进去看看产品,再放个客服电话,完…

2026/8/12 23:07:17

EMC整改实战:导电硅胶垫如何解决电机辐射发射问题

1. 先搞清楚“一片硅胶垫”到底解决了什么EMC问题看到“测EMC测到崩溃”这个标题,很多硬件和车载电子的工程师应该会心一笑。EMC(电磁兼容)测试,尤其是车载电机的RE(辐射发射)测试,确实是研发后…

2026/8/12 23:07:17

终极指南:免费将图片转换为3D打印模型的完整方案

终极指南:免费将图片转换为3D打印模型的完整方案 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left side. 项目…

2026/8/12 23:07:17

如何高效管理Windows右键菜单:智能清理的完整指南

如何高效管理Windows右键菜单:智能清理的完整指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你的Windows右键菜单是否已经变成了一个拥挤的&quo…

2026/8/12 23:02:11

2026年AI学术工具测评:降AI率工具实战指南

1. 项目概述:AI工具测评的必要性与价值 在2026年的学术环境中,AI工具已成为本科生完成课业、开展研究的标配。但面对市面上数百种工具,如何选择真正高效、可靠的解决方案?这个问题困扰着90%的非技术背景学生。我作为教育科技领域的…

2026/8/12 10:37:12

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 5:35:25

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/12 9:34:08

Ubuntu 23.10中双击运行.sh文件的完整指南:从权限原理到桌面配置

1. 项目概述:从一次“双击”引发的权限探索在Ubuntu桌面环境下,我们习惯了双击运行那些带有.exe后缀的Windows程序安装包,但当你拿到一个以.sh结尾的Shell脚本文件时,满怀期待地双击它,却很可能只看到一个文本编辑器窗…

2026/8/12 9:34:08

NumPy条件索引实战:np.where与np.argwhere高效数据筛选指南

1. 从一次数据筛选的“笨办法”说起 前几天,我帮一个刚入行的数据分析师同事看代码,他正在处理一批传感器数据,需要找出所有温度超过阈值的数据点,然后进行后续分析。我一看他的实现,好家伙,一个 for 循环…

2026/8/12 9:34:08

基于Docker与Selenium Grid构建高可用浏览器自动化测试环境

1. 项目概述:为什么需要容器化的浏览器自动化?在软件开发和测试领域,浏览器自动化早已不是新鲜事。无论是日常的UI回归测试、数据抓取,还是复杂的业务流程模拟,Selenium都是我们绕不开的利器。然而,但凡在团…

2026/8/10 11:20:30

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/11 17:06:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/11 3:05:11

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…