目录

  • 1 Python语言基础
    • 1.1 本章导学
    • 1.2 Python概述
    • 1.3 人机交互
    • 1.4 对象与变量
    • 1.5 编码与命名规范
    • 1.6 注释
    • 1.7 实践指导
      • 1.7.1 Python解释器的安装
      • 1.7.2 Pycharm的安装与基本使用
    • 1.8 项目实训
      • 1.8.1 日期格式化输出
      • 1.8.2 欢迎入学
      • 1.8.3 整数四则运算
    • 1.9 作业
    • 1.10 编程训练
  • 2 数值类型与数值运算
    • 2.1 本章导学
    • 2.2 数值类型
    • 2.3 数值类型转换
    • 2.4 数值运算
    • 2.5 常用数学运算函数
    • 2.6 Math模块及其应用
    • 2.7 实践指导
      • 2.7.1 计算矩形面积
      • 2.7.2 一元二次方程求解
      • 2.7.3 换披萨
    • 2.8 作业
    • 2.9 编程训练
    • 2.10 项目实训
      • 2.10.1 计算弓形的面积
      • 2.10.2 地球数据计算
      • 2.10.3 学费计算
  • 3 流程控制
    • 3.1 本章导学
    • 3.2 流程控制
    • 3.3 常用运算
      • 3.3.1 真值测试
      • 3.3.2 比较运算
      • 3.3.3 成员运算
      • 3.3.4 布尔运算
      • 3.3.5 身份运算
    • 3.4 循环结构
      • 3.4.1 Range
      • 3.4.2 for 循环
        • 3.4.2.1 for循环(上)
        • 3.4.2.2 for循环实例
        • 3.4.2.3 for循环(下)
      • 3.4.3 while循环
    • 3.5 分支结构
    • 3.6 流程跳转
    • 3.7 else子句
    • 3.8 异常处理
    • 3.9 实践指导
      • 3.9.1 兔子繁殖问题
      • 3.9.2 九九乘法表
      • 3.9.3 百钱百鸡
      • 3.9.4 计算圆周率
      • 3.9.5 百分制转五分制
      • 3.9.6 输出与3无关的数
      • 3.9.7 自身以外的最大因数
      • 3.9.8 判断素数
      • 3.9.9 百钱百鸡进阶
      • 3.9.10 最小公倍数
      • 3.9.11 最大素数
      • 3.9.12 四则运算
      • 3.9.13 正整数A+B
    • 3.10 作业
    • 3.11 编程训练
    • 3.12 项目实训
      • 3.12.1 古代数学问题
      • 3.12.2 个人所得税计算器
      • 3.12.3 计算圆周率
  • 4 函数与模块化编程
    • 4.1 本章导学
    • 4.2 函数定义、调用与返回值
    • 4.3 参数传递
    • 4.4 变量作用域
    • 4.5 匿名函数
    • 4.6 递归函数
    • 4.7 实践指导
      • 4.7.1 阶乘函数定义
      • 4.7.2 素数判定函数
      • 4.7.3 幂函数的定义
      • 4.7.4 简单计算器
      • 4.7.5 回文素数
    • 4.8 作业
    • 4.9 编程训练
    • 4.10 项目实训
      • 4.10.1 来自计算机的问候
      • 4.10.2 自定义数学函数模块
      • 4.10.3 神奇的素数
  • 5 字符串
    • 5.1 本章导学
    • 5.2 序列通用操作
      • 5.2.1 字符串通用操作
      • 5.2.2 索引
      • 5.2.3 切片
      • 5.2.4 序列拼接与重复
      • 5.2.5 成员测试
    • 5.3 字符串创建与字符常量
    • 5.4 字符串与文件遍历
    • 5.5 常用字符串处理方法
    • 5.6 字符串格式化
    • 5.7 random模块及应用
    • 5.8 实践指导
      • 5.8.1 字符串索引百分制转五分制
      • 5.8.2 回文字符串判断
      • 5.8.3 输出身份信息
      • 5.8.4 约瑟夫环问题
      • 5.8.5 温度转换
      • 5.8.6 字符分类统计
      • 5.8.7 凯撒加密
      • 5.8.8 遍历输出文件
      • 5.8.9 隐私数据处理
      • 5.8.10 猜数游戏
      • 5.8.11 模拟验证码
      • 5.8.12 模拟产生微软序列号
    • 5.9 作业
    • 5.10 编程训练
    • 5.11 项目实训
      • 5.11.1 信息加密与解密
      • 5.11.2 文本分析
      • 5.11.3 日期分析处理
      • 5.11.4 单词猎手游戏
  • 6 序列类型
    • 6.1 本章导学
    • 6.2 元组
    • 6.3 列表
      • 6.3.1 列表的创建
      • 6.3.2 列表的更新
      • 6.3.3 列表元素的删除
      • 6.3.4 列表排序
      • 6.3.5 列表赋值与复制
      • 6.3.6 列表推导式
      • 6.3.7 列表常用内置函数
      • 6.3.8 列表嵌套及排序
    • 6.4 实践指导
      • 6.4.1 成绩统计分析
      • 6.4.2 二维列表的排序
      • 6.4.3 自幂数
      • 6.4.4 蒙特卡洛模拟圆周率
      • 6.4.5 文件中数据统计分析
      • 6.4.6 读取Excel文件中的证券数据
      • 6.4.7 读取csv文件中的数据
      • 6.4.8 读取SQLite数据库中的数据
    • 6.5 作业
    • 6.6 编程训练
    • 6.7 项目实训
      • 6.7.1 分配学号
      • 6.7.2 葡萄酒评论分析报告
      • 6.7.3 模拟生成身份信息并查验身份
  • 7 集合与映射类型
    • 7.1 本章导学
    • 7.2 集合类型
      • 7.2.1 集合创建
      • 7.2.2 集合操作
      • 7.2.3 集合运算
    • 7.3 映射类型
      • 7.3.1 字典的创建
      • 7.3.2 获取字典数据
      • 7.3.3 修改字典值
      • 7.3.4 字典排序
    • 7.4 实践指导
      • 7.4.1 奇特的四位数
      • 7.4.2 特殊的生日
      • 7.4.3 二进制IP转十进制
      • 7.4.4 手机销售分析
      • 7.4.5 通讯录的查询与更新
      • 7.4.6 查询首都
      • 7.4.7 词频统计
    • 7.5 作业
    • 7.6 编程训练
    • 7.7 项目实训
      • 7.7.1 大学排行榜分析
      • 7.7.2 简易英汉字典
      • 7.7.3 股票分析
  • 8 文件操作
    • 8.1 本章导学
    • 8.2 文件概述
    • 8.3 文件打开与关闭
    • 8.4 文件读写操作
    • 8.5 文件的应用
      • 8.5.1 CSV与JSON文件
      • 8.5.2 文件与文件夹操作
    • 8.6 NumPy文件操作
    • 8.7 实践指导
      • 8.7.1 读取文件
      • 8.7.2 读文件统计成绩
      • 8.7.3 pandas读文件统计成绩
      • 8.7.4 csv转json
      • 8.7.5 json转csv
      • 8.7.6 csv与json互转-pandas
      • 8.7.7 从多文件中提取数据汇总
      • 8.7.8 numpy读写文件
      • 8.7.9 numpy数据分析
      • 8.7.10 pandas数据分析
    • 8.8 作业
    • 8.9 编程训练
    • 8.10 项目实训
      • 8.10.1 ​词频统计
      • 8.10.2 批量文件处理与格式转换
  • 9 数据可视化
    • 9.1 本章导学
    • 9.2 基本线型图
    • 9.3 函数绘图
    • 9.4 数据绘图
      • 9.4.1 读两列数据绘图
      • 9.4.2 读多列数据绘图
      • 9.4.3 二列数据绘制多条曲线
    • 9.5 作业
    • 9.6 编程训练
    • 9.7 项目实训
      • 9.7.1 ​科学实验数据可视化
      • 9.7.2 金融数据可视化
      • 9.7.3 中英文词云
  • 10 实践与训练资源
    • 10.1 在线编程训练
    • 10.2 教师资源
本章导学


第7章 集合与映射类型

【本章导读】

集合类型和映射类型是Python中内置的两种数据类型,因两者都使用一对大括号“{}”作为数据的界定符,所以放在一起进行讲解。本章简单介绍了集合的创建和基本操作方法,通过实例讲授了集合在去除重复元素方面的应用和集合运算。详细讲授映射数据类型(字典)的创建、值的获取与修改、内置函数与方法以及排序等知识。通过实例讲授利用字典进行数据的查询和统计的方法。

【本章要点】

●          集合的定义与创建

class set([iterable])
class frozenset([iterable])
返回一个新的 set 或 frozenset 对象,其元素来自于 iterable。
集合的元素必须为 hashable

集合可用多种方式来创建:
使用花括号内以逗号分隔元素的方式: {'jack', 'sjoerd'}
使用集合推导式: {c for c in 'abracadabra' if c not in 'abc'}
使用类型构造器: set(), set('foobar'), set(['a', 'b', 'foo'])


●          集合的运算与应用

len(s)返回集合 s 中的元素数量(即 s 的基数)。
x in s检测 x 是否为 s 中的成员。
x not in s检测 x 是否非 s 中的成员。
isdisjoint(other)如果集合中没有与 other 共有的元素则返回 True。 当且仅当两个集合的交集为空集合时,两者为不相交集合。
issubset(other)
set <= other检测是否集合中的每个元素都在 other 之中。
set < other检测集合是否为 other 的真子集,即 set <= other and set != other。
issuperset(other)
set >= other检测是否 other 中的每个元素都在集合之中。
set > other检测集合是否为 other 的真超集,即 set >= other and set != other。
union(*others)
set | other | ...返回一个新集合,其中包含来自原集合以及 others 指定的所有集合中的元素。
intersection(*others)
set & other & ...返回一个新集合,其中包含原集合以及 others 指定的所有集合中共有的元素。
difference(*others)
set - other - ...返回一个新集合,其中包含原集合中在 others 指定的其他集合中不存在的元素。
symmetric_difference(other)
set ^ other返回一个新集合,其中的元素或属于原集合或属于 other 指定的其他集合,但不能同时属于两者。
copy()  返回原集合的浅拷贝。


可用于 set 而不能用于不可变的 frozenset 实例的操作:
update(*others)
set |= other | ...更新集合,添加来自 others 中的所有元素。
intersection_update(*others)
set &= other & ...更新集合,只保留其中在所有 others 中也存在的元素。
difference_update(*others)
set -= other | ...更新集合,移除其中也存在于 others 中的元素。
symmetric_difference_update(other)
set ^= other更新集合,只保留存在于集合的一方而非共同存在的元素。
add(elem)将元素 elem 添加到集合中。
remove(elem)从集合中移除元素 elem。 如果 elem 不存在于集合中则会引发 KeyError。
discard(elem)如果元素 elem 存在于集合中则将其移除。
pop()从集合中移除并返回任意一个元素。 如果集合为空则会引发 KeyError。
clear()从集合中移除所有元素。


●          字典的创建与修改

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
返回一个新的字典,基于可选的位置参数和可能为空的关键字参数集来初始化。

字典可用多种方式来创建:
使用花括号内以逗号分隔 键: 值 对的方式: {'jack': 4098, 'sjoerd': 4127} or {4098: 'jack', 4127: 'sjoerd'}
使用字典推导式: {}, {x: x ** 2 for x in range(10)}
使用类型构造器: dict(), dict([('foo', 100), ('bar', 200)]), dict(foo=100, bar=200)


●          字典的操作与方法

list(d)         返回字典 d 中使用的所有键的列表。
len(d)          返回字典 d 中的项数。
d[key]          返回 d 中以 key 为键的项。 如果映射中不存在 key 则会引发 KeyError。
d[key] = value  将 d[key] 设为 value。
del d[key]      将 d[key] 从 d 中移除。 如果映射中不存在 key 则会引发 KeyError。
key in d        如果 d 中存在键 key 则返回 True,否则返回 False。
key not in d    等价于 not key in d。
iter(d)  返回以字典的键为元素的迭代器。 这是 iter(d.keys()) 的快捷方式。
clear()  移除字典中的所有元素。
copy()   返回原字典的浅拷贝。
classmethod fromkeys(iterable[, value])使用来自 iterable 的键创建一个新字典,并将键值设为 value。
get(key[, default])  如果 key 存在于字典中则返回 key 的值,否则返回 default。 如果 default 未给出则默认为 None,因而此方法绝不会引发 KeyError。
items()   返回由字典项 ((键, 值) 对) 组成的一个新视图。 参见 视图对象文档。
keys()    返回由字典键组成的一个新视图。 参见 视图对象文档。
pop(key[, default]) 如果 key 存在于字典中则将其移除并返回其值,否则返回 default。 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError。
popitem()    从字典中移除并返回一个 (键, 值) 对。 键值对会按 LIFO 的顺序被返回。
reversed(d)  返回一个逆序获取字典键的迭代器。 这是 reversed(d.keys()) 的快捷方式。
setdefault(key[, default])  如果字典存在键 key ,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None。
update([other]) 使用来自 other 的键/值对更新字典,覆盖原有的键。 返回 None。
values()     返回由字典值组成的一个新视图
d | other    合并 d 和 other 中的键和值来创建一个新的字典,两者必须都是字典。当 d 和 other 有相同键时, other 的值优先。
d |= other   用 other 的键和值更新字典 d ,other 可以是 mapping 或 iterable 的键值对。当 d 和 other 有相同键时, other 的值优先。


字典视图对象
len(dictview)返回字典中的条目数。
iter(dictview)返回字典中的键、值或项(以 (键, 值) 为元素的元组表示)的迭代器。
x in dictview如果 x 是对应字典中存在的键、值或项 则返回 True。
reversed(dictview)返回一个逆序获取字典键、值或项的迭代器。


●          字典的排序

sorted(iterable, *, key=None, reverse=False)

字典无序,可对字典键、值或键值对排序,返回值为列表
字典名或dict.keys()为参数可返回键的排序列表
dict.values()为参数可返回值的排序列表
dict.items()为参数可对列表元素进行排序,默认根据键值排序,key 参数结合lambda 表达式可根据值排序


●          集合与字典的应用