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/9/25 22:32:45 阅读更多 →
2026年8月智能仓储厂家:自动化智能货架仓储生产企业深度盘点

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

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

2026/10/18 19:54:50 阅读更多 →
CORS(跨原产资源共享)靶场1

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

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

2026/10/4 22:19:13 阅读更多 →

最新新闻

Clawbot深度解析:从感知到执行的AI智能体实操指南

Clawbot深度解析:从感知到执行的AI智能体实操指南

1. 革命起点:一款真正“动手干活”的AI体 先问一个问题:你现在用的AI,能帮你干什么? 写周报、画图、做PPT、改代码……这些事做得确实漂亮,但全部停留在 数字世界 里。你让它把桌上的水杯拿过来,它做不到…

2026/10/19 19:54:19 阅读更多 →
open-code-review:基于 Git Diff 与 Tree-sitter 的可审计 AI 代码评审

open-code-review:基于 Git Diff 与 Tree-sitter 的可审计 AI 代码评审

1. 这不是又一个“AI Code Review”工具:open-code-review 的真实定位与设计哲学我第一次在 GitHub 上看到 open-code-review 这个仓库时,下意识点开 README, expecting 又是一个“用 LLM 给 PR 加评论”的玩具项目——结果发现它连一行模型调…

2026/10/19 19:54:19 阅读更多 →
NVIDIA Atlas实战解析:AI工厂蓝图如何落地?部署调优与仿真实践

NVIDIA Atlas实战解析:AI工厂蓝图如何落地?部署调优与仿真实践

1. 用了一年NVIDIA Atlas,我重新理解了"AI工厂"这三个字先说结论:2025年之前,如果有人跟我说"AI基础设施是一张地图",我大概率会觉得这是个比喻。但真的把NVIDIA Atlas这套东西从零部署起来、跑完几个真实的推…

2026/10/19 19:54:19 阅读更多 →
机器学习必懂的统计量:均值方差协方差与Batch Normalization

机器学习必懂的统计量:均值方差协方差与Batch Normalization

机器学习入门最容易被忽略,但又最值得先搞明白的一块,就是统计量。算法框架可以现成调用,模型效果不好时手里却没有排查工具,根本原因就是对这些底层概念理解得模棱两可。均值、方差、协方差、相关系数、标准化,一直到…

2026/10/19 19:54:19 阅读更多 →
开源代码评审工具open-code-review:把Code Review变成工程化流程

开源代码评审工具open-code-review:把Code Review变成工程化流程

现在很多团队谈到 Code Review,第一反应就是"又慢又烦",评审人打开 PR 看一眼就 Approve,或者干脆在群里吼一句"谁有空帮我看看",然后一整天没人理。我做了几年研发管理和架构工作,见过太多 Revie…

2026/10/19 19:51:14 阅读更多 →
小说阅读平台章节模块设计:从ThinkPHP到Laravel重构实战

小说阅读平台章节模块设计:从ThinkPHP到Laravel重构实战

做小说在线阅读平台这件事,我最深的体会是:真正决定项目上限的往往不是花里胡哨的功能,而是最基础的那套章节模块。标题里的“章节设计”四个字,看起来只是建一张表、写几个接口,实际做下来才发现,它把正文…

2026/10/19 19:50:13 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →