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/11/13 21:56:28 阅读更多 →
2026年8月智能仓储厂家:自动化智能货架仓储生产企业深度盘点

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

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

2026/11/13 6:31:24 阅读更多 →
CORS(跨原产资源共享)靶场1

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

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

2026/11/11 21:24:25 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻