Day4_Python基础

1、字典
(1)字典的创建
<1> 通过{}、dict()来创建字典对象
在这里插入图片描述
(2)字典元素的访问
<1> 通过[键]获得”值“。若键不存在,则抛出异常。
在这里插入图片描述
<2> 通过get()方法获得”值“。推荐使用。有点是:指定键不存在的话返回None;也可以设定指定键不存在时默认返回的对象。推荐使用get()获取“值对象”。
在这里插入图片描述
<3> 列出所有的键值对:items()方法
在这里插入图片描述
<4> 列出所有的键,列出所有的值:keys()方法
在这里插入图片描述
<5> len()键值对的个数
在这里插入图片描述
<6> 检测一个“键”是否在字典中:in
在这里插入图片描述
(2)字典元素的添加、修改和删除
<1> 给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,则新增“键值对”。
在这里插入图片描述
<2>使用update()将新字典中所有键值对全部添加到旧字典对象上。如果key有重复,则直接覆盖原来的值。
<3> 字典中元素的删除,可以使用del()方法;或者使用clear()删除所有键值对;pop()删除指定键值对,并返回对应的“值对象”;
<4> popitem():随机删除和返回该键值对。字典是“无序可变序列”,所以没有第一个元素和最后一个元素的概念;popitem弹出随机的项,因为字典没有最后的元素或者其他有关顺序的概念,若想一个接一个地移除并处理项,这个方法比较有效。
(3)序列解包(多看例子多记)
序列解包用于字典时,默认是对“键”进行操作;
如果需要对键值对进行操作,则需要使用items();
如果需要对**“值”进行操作,则需要使用values()**;

(4) 表格数据使用字典和列表存储,并实现访问

r1 = {"name":"kdx", "age":23, "salary":30000, "city":"北京"}
r2 = {"name":"sss", "age":20, "salary":40000, "city":"上海"}
r3 = {"name":"CHQS", "age":23, "salary":12000, "city":"南京"}

tb = [r1, r2, r3]

#获得第三行人的城市
print(tb[2].get("city"))

#打印表中所有人的姓名和薪资
for i in range(len(tb)):
    print(tb[i].get('name'),tb[i].get('salary'))

#打印表中所有数据
for i in range(len(tb)):
    print(tb[i].get('name'),tb[i].get('age'),tb[i].get('salary'),tb[i].get('city'))

(5)字典核心底层原理(重要)
字典对象的核心是散列表,它是一个稀疏数组(总有空白元素的数组),数组的每个单元叫做bucket。每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。
由于所有bucket结构和大小一致,我们可以通过偏移量来读取指定bucket。
具体结构如图所示
在这里插入图片描述
(6) 将一个键值对放进字典的底层过程(重复理解)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(7) 根据键查找“键值对”的底层过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、集合
(1) 集合创建和删除
<1> 使用{}创建集合对象,并使用add()方法添加元素
在这里插入图片描述
<2> 使用set(),将列表、元组等可迭代对象转化为集合。如果原来数据存在重复数据,则只保留一个。
在这里插入图片描述
<3> remove()删除指定元素;clear()清空整个集合
![在这里插入图片描述](https://img-blog.csdnimg.cn/af49f13aaea54fdfb16f8117a106ba72.png在这里插入图片描述
(2) 集合相关操作
在这里插入图片描述
3、控制语句–选择结构
(1)条件表达式详解
在这里插入图片描述
测试各种条件表达式,如图所示。
在这里插入图片描述

(2)条件表达式中,不能有赋值操作符“=”
在这里插入图片描述
(3)三元条件运算符
在这里插入图片描述
(4)选择结构嵌套(注意复习format的用法)
在这里插入图片描述

本章作业

  1. 画出代码 a = [100,200,300]的内存存储示意图。
    在这里插入图片描述
  2. 使用 range 生成序列:30,40,50,60,70,80
    在这里插入图片描述
  3. 推导式生成列表: a = [x*2 for x in range(100) if x%9==0],手写出结果。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 元组和列表有哪些共同点?有哪些不同点?
共同点:列表和元组都属于有序序列;
都支持使用双向索引访问其中的元素;
以及使用count()方法统计指定元素的出现次数和index()方法获取指定元素的索引,len()、map()、filter()等大量内置函数和+、in等运算符也都可以作用于列表和元组。

不同点:元组属于不可变序列,不可以直接修改元组中元素的值,也无法为元组增加或删除元素。

x = (1, 2, 3)       #直接把元组赋值给一个变量
x[1] = 4            #元组是不可变的
TypeError: 'tuple' object does not support item assignment

元组没有提供append()、extend()和insert()等方法,无法向元组中添加元素;同样,元组也没有remove()和pop()方法,也不支持对元组元素进行del操作,不能从元组中删除元素,而只能使用del命令删除整个元组。
元组也支持切片操作,但是只能通过切片来访问元组中的元素,而不允许使用切片来修改元组中元素的值,也不支持使用切片操作来为元组增加或删除元素。
元组缓存于Python运行时环境,每次使用元组时无须访问内核去分配内存。
Python的内部实现对元组做了大量优化,访问速度比列表更快。如果定义了一系列常量值,主要用途仅是对它们进行遍历或其他类似用途,而不需要对其元素进行任何修改,那么一般建议使用元组而不用列表。
元组在内部实现上不允许修改其元素值,从而使得代码更加安全,例如调用函数时使用元组传递参数可以防止在函数中修改元组,而使用列表则很难保证这一点。
元组可用作字典的键,也可以作为集合的元素。而列表则永远都不能当作字典键使用,也不能作为集合中的元素。

  1. 创建一个字典对象,包含如下信息:
    支出金额:300.15,支出日期:2018.10.18,支出人:高小七
    在这里插入图片描述
  2. 使用字典存储行数据,最后将整个表使用列表存储起来。
    在这里插入图片描述
    在这里插入图片描述
  3. 用文字和自己画的示意图描述:字典存储一个键值对的底层过程。在这里插入图片描述
    在这里插入图片描述
  4. 集合和字典有什么关系?
    共同点:
    ①都是使用花括号{}将任意对象括起来的集合
    ②他们都是无序的数据集合
    ③都是一种可变的容器模型(可变的序列)。

不同点:
①存储对象不一样
字典是由”键-值”(key-value)对组成的集合,字典的”值”(key)通过”键”(value)来引用。键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一,且key可存储任意类型对象。
集合不支持下标索引,它是可变的数据类型,集合中的元素是唯一的,且不可以存列表和字典,一般用于元组或者列表中的元素去重。
②打印输出顺序不一样
  使用print输出字典的时候,通常输出的顺序和定义的顺序是不一致的;输出集合顺序和定义的一致。
③集合底层是字典实现,集合的所有元素都是字典中的“键对象”。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeetCode_C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值