2021-03-03

python-第五节-序列2

字典简介
字典是键值对的无序可变序列,字典的每个元素都是一个键值对,包含“键对象”和“值对象”。可以通过键对象实现快速获取、删除、更新对应的值对象。
列表中我们通过下标数字找到对应的对象。字典中通过键对象找到对应的值对象。键是任意的不可变数据,不如整数、浮点数、字符串、元组。但是列表、字典、集合这些可变对象,不能作为键。并且键不可重复。值可以是任意的数据,并且可重复
一个典型的字典的定义方式:
a={“name”:“zzh”,“age”:18,“job”:“工程师”}
字典的创建
1、我们可以通过{}、dict{}来创建字典对象。
在这里插入图片描述
2、通过zip()创建字典对象
在这里插入图片描述
3、通过fromkeys创建值为空的字典
在这里插入图片描述
字典元素的访问
为了测试各种访问方法,我们这里设定一个字典对象:
1、通过键获得值。若键不存在,则抛出异常
在这里插入图片描述
2、通过get()方法获得值。推荐使用。优点是:指定键不存在,返回None;也可以设定指定键不存在时默认返回的对象。推荐使用get()获得值对象
在这里插入图片描述
3、列出所有的键值对
在这里插入图片描述
4、列出所有的键,列出所有的值
在这里插入图片描述
5、len()键值对的个数
在这里插入图片描述
6、检测一个键是否在字典中
在这里插入图片描述
字典元素添加、修改、删除
1、给字典新增键值对,如果键已经存在,则覆盖旧的键值对,如果键不存在,则新增键值对
在这里插入图片描述
2、使用update()将新字典中所有键值对全部添加到旧字典对象上。如果key有重复,则直接覆盖
在这里插入图片描述
3、字典中元素的删除,可以使用del()方法;或者clear删除所有键值对;pop删除指定键值对并返回对应的值对象
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

4、popitem()随机删除个返回该键值对。字典是无序可变序列,因此没有第一个元素、最后一个元素的概念;popitem弹出随机的项,因为字典并没有最后的元素或者其他有关顺序的概念。若想一个接一个地的移除并处理项,这个方法就非常有效。(因为不用首先获取键的列表)
在这里插入图片描述

序列解包
序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值
在这里插入图片描述
序列解包用于字典时,默认是对键进行操作,如果需要对键值对操作,则需要使用items();如果需要对值进行操作,则需要使用values()
默认对键进行操作
在这里插入图片描述
表格数据使用字典和列表存储,并实现访问
在这里插入图片描述
在这里插入图片描述
字典核心底层原理
字典对象的核心是散列表。散列表是一个稀疏数组(总有空白元素的数组),数组的每个单元叫做bucket。每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。
由于所有bucket结构和大小一致,我们可以通过偏移量来读取指定bucket

将一个键值对放进字典的底层过程
在这里插入图片描述
在这里插入图片描述
扩容
python会根据散列表的拥挤程度扩容。扩容指的是创造更大的数组,将原有内容拷贝到新数组中。接近2/3时,数组就会扩容

根据键查找键值对的底层过程
在这里插入图片描述
在这里插入图片描述
用法总结:
1、键必须可散列
(1)数字、字符串、元组,都是可散列的
(2)自定义对象需要支持下面三点
2、字典在内存中开销巨大,典型的空间换是
3、键查询速度很快
4、往字典中添加新键值对可能会导致扩容,导致散列表中键的次序编号。因此,不要在变量字典的同时进行自动的修改

集合
集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典中的键对象,因此是不能重复且唯一的
集合创建与删除
1、使用{}创建集合对象,并使用add()方法添加元素
在这里插入图片描述
2、使用set(),将列表、元组等可迭代对象转化成集合。如果原来数据存在重复数据,则只保留一个
在这里插入图片描述
在这里插入图片描述
3、remove()删除指定元素,clear()清空集合
在这里插入图片描述
集合相关操作
像数学概念中一样,python对集合也提供了并集、交集、差集等运算。我们给出实例
在这里插入图片描述
章节实操作业
1、画出代码a=[100,200,300]的内存存储示意图
在这里插入图片描述
2、使用range生成序列:30,40,50,60,70,80,90
在这里插入图片描述
3、推导式生成列表:a=【x*2 for x in range(100) if x%9==0】手写出结果
a=[0,18,36,54,72,90,108,126,144,162,180,198]
4、使用二维列表存储表格信息,并画出简单的内存存储示意图:
在这里插入图片描述
在这里插入图片描述
5、元组和列表有哪些共同点?有哪些不同点?
1、元组和列表都是序列,元组不可变,列表可变
2、列表由于可变,有增加删除修改等操作,元组不可变,没有增加删除修改操作
3、列表和元组都可以支持索引访问操作、切片操作、连接操作、成员关系操作、比较运算操作、计数、元组长度、最大值、最小值等

6、创建一个字典对象,包含如下信息:
支出金额:300.15 支出日期:2018,10,18 支出人:高小七
a={‘支出金额’:300.15,‘支出日期’:‘2018,10,18’,“支出人”:“高小七”}
7、使用字典存储行数据,最后将整个表使用列表存储起来
在这里插入图片描述
在这里插入图片描述
8、用文字和自己画的示意图描述:字典存储一个键值对的底层过程
首先对键进行hash值计算,取末尾三位计算,查找对应的位置,如果为空,则存入,如果不为空,则继续向左取三位进行计算,查找对应的位置,直到存储成功为止,如果已经存在了,则覆盖键值对

9、集合和字典有什么关系
集合的底层存储的是字典的键

控制语句

变量、数据类型、序列,可以看做是数据的组织方式。数据可以看做是砖块
流程控制语句是代码的组织方式,可以看做事混凝土。一个完整的程序,离不开砖块,也离不开混凝土。他们的组合,才能让我们建立从小到一个方法,大到操作系统,这样各种各样的软件
下载安装PyCharm

选择结构:

在这里插入图片描述
单分支结构:
if语句单分支结构的语法形式如下
if 条件表达式:
语句/语句块
其中:
1、条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等
2、语句/语句块:语句数量没有限制,但是缩进要求一致
双分支结构:
if 条件表达式:
语句块
else:
语句块
多分支结构:

if 条件表达式:
语句块
elif:
语句块
elif:
语句块
……
elif:
语句块
在这里插入图片描述
在这里插入图片描述
简化版
在这里插入图片描述
在这里插入图片描述

三元条件运算符:
用于某些简单双分支
条件为真时的值 if (条件表达式)else 条件为假时的值
上一个案例的代码,可以使用三元运算符实现:
在这里插入图片描述
选择结构嵌套:
选择结构可以嵌套,使用时一定要注意控制好不同级别代码块的缩进量,因为缩进量决定了代码的从属关系。语法格式如下
在这里插入图片描述
嵌套结构
在这里插入图片描述
循环结构
循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反 复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果 为 True 则重复执行循环体里的语句。图示如下:
在这里插入图片描述
循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束,否则,就会变成一个死循环。
while循环:
while 条件表达式:
循环体语句
在这里插入图片描述
for 循环和可迭代对象遍历:
for循环通常用于可迭代对象的遍历。for循环的语法格式如下:
for 变量 in 可迭代对象:
循环体语句
在这里插入图片描述
遍历字典
在这里插入图片描述
range对象
range 对象是一个迭代器对象,用来产生指定范围的数字序列。
格式为: range(start, end [,step]) 生成的数值序列从 start 开始到 end 结束(不包含 end)。
若没有填写 start,则默认从 0 开始。step 是可选的步长,默认为 1。
如下是几种典型示例:
for i in range(10) 产生序列:0 1 2 3 4 5 6 7 8 9
for i in range(3,10) 产生序列:3 4 5 6 7 8 9
for i in range(3,10,2) 产生序列:3 5 7 9
嵌套循环和综合练习:
在这里插入图片描述
九九乘法表
在这里插入图片描述
break语句:跳出循环
break 语句可用于 while 和 for 循环,用来结束整个循环 有嵌套循环时,break 能跳出最近一层的循环
在这里插入图片描述
continue语句:跳出当前一次循环,继续下一次循环
在这里插入图片描述
测试break和continue语句
在这里插入图片描述
else语句
while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句 结束,则会执行 else 子句,否则不执行。语法格式如下:
在这里插入图片描述
在这里插入图片描述
循环代码优化
虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
  3. 局部变量查询较快,尽量使用局部变量
    在这里插入图片描述
    其他优化手段
    1、连接多个字符串,使用join(0而不使用+
    2、列表进行元素插入和删除,尽量在列表尾部操作

使用zip()并行迭代
我们可以通过zip函数对多个序列进行并行迭代,zip函数在最短序列用完时就会停止
在这里插入图片描述
推导式创建序列
推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初 学者的水平。
列表推导式
在这里插入图片描述
字典推导式
字典的推导式生成字典对象,格式如下:
{key_expression : value_expression for 表达式 in 可迭代对象}
类似于列表推导式,字典推导也可以增加if条件判断、多个for循环。
统计文本中字符出现的次数:
在这里插入图片描述
集合推导式
和列表推导式的语法格式类似:
{表达式 for item in 可迭代对象 } 或者:{表达式 for item in 可迭代对象 if 条件判断}
在这里插入图片描述

生成器推导式(生成元组)
元组是没有推导式的,我们发现提示的是“一个生成器对象“,显然元组是没有推导式的
在这里插入图片描述
只能迭代一次,迭代第二次发现已经空了
综合练习
1、装 Pycharm 开发环境,并使用图文描述整个过程。
2、入一个学生的成绩,将其转化成简单描述:不及格(小于 60)、及格(60-79)、良好 (80-89)、优秀(90-100)
在这里插入图片描述
3、知点的坐标(x,y),判断其所在的象限
在这里插入图片描述
4、输入一个分数。 在 0-100 之间。90 以上是 A,80 以上是 B,70 以上是 C,60 以上 是 D。60 以下是 E
在这里插入图片描述
5. 利用 while 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和,计算 1-100 之间奇数的累加和
在这里插入图片描述
6. 利用 for 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和,计算 1-100 之间奇数的累加和
在这里插入图片描述
7. 打印如下图案0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
在这里插入图片描述
8. 利用嵌套循环打印九九乘法表
在这里插入图片描述
9. 用列表和字典存储下表信息,并打印出表中工资高于 15000 的数据 姓名 年龄 薪资 城市 高小一 18 30000 北京 高小二 19 20000 上海 高小五 20 10000 深圳
在这里插入图片描述
10. 要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量和薪资明 细,以及平均薪资
在这里插入图片描述
11. 员工一共 4 人。录入这 4 位员工的薪资。全部录入后,打印提示“您已经全部录入 4 名员工的薪资”。最后,打印输出录入的薪资和平均薪资
在这里插入图片描述
12. 使用海龟绘图,绘制同心圆:
在这里插入图片描述
13. 使用海龟绘图,绘制 18*18 的棋盘:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值