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))

相关新闻

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

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

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

2026/8/12 20:51:46 阅读更多 →
2026年8月智能仓储厂家:自动化智能货架仓储生产企业深度盘点

2026年8月智能仓储厂家:自动化智能货架仓储生产企业深度盘点

一、行业需求洞察:四大驱动力推动智能仓储进入黄金发展期2026年,中国智能制造与智慧物流迈入深度落地阶段,自动化智能货架仓储系统已从制造业"可选项"转变为新质生产力的标配基础设施。在土地成本攀升、人力成本高企、双碳政策倒逼…

2026/8/12 20:50:45 阅读更多 →
CORS(跨原产资源共享)靶场1

CORS(跨原产资源共享)靶场1

什么是“域”?在互联网世界里,“域”通常指的就是域名(Domain Name)。你可以把它理解为一个网站的“名字”或“门牌号”。因为互联网上的每台服务器都有一个由数字组成的IP地址(如 203.0.113.19)&#xff0…

2026/8/12 20:50:45 阅读更多 →

最新新闻

AI时代程序员转型指南:2026-2030高价值技术方向与学习路径

AI时代程序员转型指南:2026-2030高价值技术方向与学习路径

在实际技术职业规划中,很多开发者都面临一个核心困境:技术栈迭代太快,今天学的框架可能明天就过时了,而AI的冲击又让很多传统开发岗位的边界变得模糊。面对“AI洗牌程序员”的讨论,与其焦虑,不如系统性地分…

2026/8/12 21:36:21 阅读更多 →
Ubuntu 18.04-20.04自动root登录配置与安全实践指南

Ubuntu 18.04-20.04自动root登录配置与安全实践指南

1. 项目概述:为什么需要自动root登录?在Linux桌面环境,尤其是Ubuntu的日常使用中,我们经常会遇到一个矛盾:一方面,系统出于安全考虑,默认禁用root账户的图形界面登录,并鼓励用户使用…

2026/8/12 21:36:21 阅读更多 →
goexif高级技巧:处理尼康/佳能相机MakerNote数据的最佳实践

goexif高级技巧:处理尼康/佳能相机MakerNote数据的最佳实践

goexif高级技巧:处理尼康/佳能相机MakerNote数据的最佳实践 【免费下载链接】goexif Decode embedded EXIF meta data from image files. 项目地址: https://gitcode.com/gh_mirrors/go/goexif 在数字摄影领域,EXIF metadata是隐藏在图片文件中的…

2026/8/12 21:36:21 阅读更多 →
别再当提示词复读机!学会Skill,真正让AI帮你提效

别再当提示词复读机!学会Skill,真正让AI帮你提效

文章目录 前言1 先捅破窗户纸:你可能不是在用AI,是在给AI打工1.1 谁还没当过提示词复读机啊1.2 更气人的是说了还记不住1.3 问题根本不在提示词不够长 2 Skill到底是什么?说人话版2.1 说白了就是AI的标准作业手册2.2 它和提示词、脚本真不是一…

2026/8/12 21:36:21 阅读更多 →
GitHub爆火Semantica:解决AI Agent最大痛点,让模型决策全程可溯源

GitHub爆火Semantica:解决AI Agent最大痛点,让模型决策全程可溯源

文章目录1. 先唠唠这项目到底啥来头1.1 先上点硬数据2. 这玩意儿到底是干啥的2.1 一句话说清定位2.2 最狠的设计:决策是一等公民3. 技术上有啥真东西3.1 上下文图决策智能3.2 确定性推理,跟黑盒说再见3.3 溯源合规,审计党狂喜3.4 多源通吃&am…

2026/8/12 21:36:21 阅读更多 →
多智能体沙盒实验:AI在荒岛求生中涌现的社会性行为

多智能体沙盒实验:AI在荒岛求生中涌现的社会性行为

1. 项目概述:一场AI“荒岛求生”的社会性实验最近我干了一件挺有意思的事儿,没写一行代码,却感觉比调试一个复杂系统还累。我把四个不同“性格”的大语言模型(LLM)——你可以理解为四个顶尖的AI大脑——扔进了一个虚拟…

2026/8/12 21:35:20 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

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

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

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →