《Python核心编程》(第二版) 第7章 映像和集合类型

第7章 映像和集合类型


7.1 映射类型:字典

(1)字典是Python语言中唯一的映射类型。映射类型中哈希值(Key)和指像对象(Value)是一对多的关系。

(2)映射类型通常被称为哈希表。

(3)一个字典条目的语法格式是键-值对,多条字典条目被包含在大括号({})中。


7.1.1 如何创建字典和给字典赋值

除赋值操作创建字典外,可通过fromkeys()创建“默认”字典。

>>>ddict = {}.fromkeys(('x', 'y'), -1)

>>>ddict

{'y': -1, 'x': -1}


7.1.2 如何访问字典中的值


7.1.3 如何更新字典


7.1.4 如何删除字典



7.2 映射类型操作符

字典可以和所有的标准类型操作符一起工作,但却不支持像拼接和重复等操作。


7.2.1 标准类型操作符


7.2.2 映射类型操作符

(1)字典的键查找操作符

(2)(键)成员关系操作(in、not in)



7.3 映射类型的内建函数和工厂函数


7.3.1 标准类型函数【type()、str()和cmp()】

1.字典的cmp()算法规则:

(1)比较字典长度,键的个数越多,字典越大。

(2)比较字典的键:字典中相同的键会映射到哈希表的同一个位置,保证了字典检查的一致性。当2个键不相同时,直接对键进行比较。

(3)比较字典的值:两个字典的长度和键完全相同,则对值进行比较。

(4)完全匹配:字典的长度、键、值完全相同,则字典相等。


7.3.2 映射类型相关的函数

1.dict()

(1)用于创建字典,如不提供参数则生成空字典。

(2)参数是可迭代的,即是一个序列,或者是一个迭代器,或者为可迭代对象。


2. len()

返回所有元素(键-值对)的数目


3.hash()

判断对象是否为可以作为字典的键,将对象传递给hash(),返回该对象的哈希值,只有该对象为可哈希的(不可哈希则返回错误),才可作为字典的键。



7.4 映射类型内建方法

1.dict.clear():删除字典中的所有元素

2.dict.copy():返回字典(浅复制)的一个副本

3.dict.fromkeys(seq, val = None):创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(如不提供此值,则默认为None)

4.dict.get(key, default = None):返回字典中key对应的值,如字典中不存在此键,则返回default的值。

5.dict.has_key(key):如果字典中存在键则返回True,否则返回False,可用in和not in代替之。

6.dict.items():返回一个包含字典中键-值对之元组列表。

7.dict.keys():返回一个包含字典中键的列表。

8.dict.pop(key, default):如果字典中key存在,删除并返回dict[key],如果不存在,则返回default值(未提供default值会产生异常)。

9.dict.setdefault(key, default = None):类似set(),如果字典中不存在key,则有dict[key] = default为之赋值。

10.dict.update(dict2):将字典dict2的值键对添加到字典dict中。

11.dict.values():返回一个包含字典中所有值的列表。



7.5 字典的键


7.5.1 不允许一个键对应多个值

赋值会把原值替换掉


7.5.2 键必须是可哈希的

所有不可变类型都是可哈希的,可哈希的键是不可更改的。



7.6 集合类型

数学上,把set称为由不同元素组成的集合,集合分为可变集合(set)和不可变集合(frozenset)。可变集合是不可哈希的。


7.6.1 如何创建集合类型和给集合赋值

集合被创建的方法:set()和frozenset()

>>>s = set('china')

>>>s

set(['c', 'h', 'i', 'n', 'a'])

>>>t = frozenset('lei')

>>>t

frozenset(['c', 'h', 'i', 'n', 'a'])


7.6.2 如何访问集合中的值

可遍历查看元素是否为集合中的成员:

>>>'c' in s

True

>>>for i in s:

...        print i

c

h

i

n

a


7.6.3 如何更新集合

用各种集合内建的方法和操作符添加和删除集合的成员。


7.6.4 如何删除集合中的成员和集合



7.7 集合类型操作符


7.7.1 标准类型操作符(所有的集合类型)

1.成员关系(in, not in)

2.集合等价/不等价:两个集合相等是指,对每个集合而言,当且仅当其中一个集合中的每个成员同时也是另一个集合中的成员。

3.子集/超集:“小于”符号(<, <=)用来判断子集,“大于”符号(>, =)用来判断超集。


7.7.2 集合类型操作符(所有的集合类型)

1.联合(|):两个集合的联合是一个新集合,该集合的每个元素都至少是其中一个集合的成员。等价于union()。

>>>s = set('lei')

>>>t = frozenset('cheng')

>>>s | t

set( ['l', 'e', 'i', 'c', 'h', 'n', 'g'] )


2.交集(&):交集形成的新集合中的每个元素同时是两个集合中的成员

>>>s&t

set( ['e'] )


3.差补/相对补集(-):s和t的差补形成的新集合中的元素只属于s,而不属于t。等价于difference()。

>>>s-t

set( ['l', 'i'] )


4.对称差分(^):s和t的对称差分是一个新集合,该集合中的元素只能属于集合s或集合t,不能同时属于两个集合。

>>>s^t

set( ['l', 'i', 'c', 'h', 'n', 'g'] )


5.混合集合类型操作

(1)上示例中,左边s是可变集合,右边t是不可变集合,使用集合操作符后产生的依然是可变集合。但如左右顺序反过来则会生成不可变集合。

(2)集合类型操作结果与左操作数的类型相同。


7.7.3 集合类型操作符

1.(Union)Update(|=):从已存在的集合中添加*(可能多个)成员,与update()等价。

2.Retention/Intersection Update(&=):保留(或交集更新)操作保留与其它集合的共有成员,与intersection_update()等价。

3.Difference Update(-=):s-=t 返回一个新集合,该集合中的成员是集合s去除掉集合t中的元素后剩余的元素。

4.Symmetric Difference Update(^=):差分更新操作:s^=t 返回的集合中的成员仅是原集合s或仅是另一集合t中的成员。



7.8 内建函数

7.8.1 标准类型函数

len()返回集合元素个数。


7.8.2 集合类型工厂函数

set()和frozenset()



7.9 集合类型内建方法


7.9.1 方法(所有集合类型)

(1) s.issubset(t)

(2) s.isupperset(t)

(3) s.union(t)

(4) s.intersection(t)交集

(5) s.difference(t) 仅为s成员

(6) s.symmetric_difference(t) 非s和t共有成员

(7) s.copy()


7.9.2 方法(仅适用于可变集合)

1. s.update(t)

2.s.intersection_update(t):交集

3.s.difference_update(t):仅为s元素

4.s.symmetric_difference_update(t):非s和t共有元素

5.s.add(obj)

6.s.remove(obj)

7.s.discard(obj):如果obj是s中的元素,则从s中删除obj。

8.s.pop()

9.s.clear()


7.9.3 操作符和内建方法比较



7.10 集合类型总结表



7.11 相关模块



7.12 练习

标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目不仅涵盖了数据预处理、模型构建与训练、性能评估,还包括了GUI界面的设计与实现。此外,文还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测与预测维护、交通流量预测与智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源不仅提供了详细的代码实现模型架构解析,还深入探讨了模型优化实际应用中的挑战与解决方案。因此,在学习过程中,建议结合理论与实践,逐步理解各个模块的功能实现细节,并尝试在自己的项目中应用这些技术方法。同时,注意数据预处理的重要性,合理设置模型参数与网络结构,控制多步预测误差传播,防范过拟合,规划计算资源与训练时间,关注模型的可解释性透明度,以及持续更新与迭代模型,以适应数据分布的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值