Day7_字典和集合
笔记:
字典
- 什么是字典
"""
字典是容器型数据类型(序列),将{}作为容器标志,里面多个元素用逗号隔开(每个元素必须是键值对)
{键1:值1,键2:值2,...}
字典是可变的(支持增删改);字典无序
键:是不可变的数据(数字、字符串、元组);键是唯一的
值:值才是字典真正想要保存的数据,键的作用就像列表中的下标来对值进行区分的
"""
-
空字典 ‘ {} ’
-
字典无序
-
键是不可变的
-
键是唯一的
- 查 - 获取值
- 查单个:
- 字典[键] - 获取字典中指定键对应的值,键不存在会报错
- 字典.get(键) - 获取字典中指定键对应的值,不存在不会报错,返回None
- 字典.get(键,默认值) - 获取字典中指定键对应值,不存在不会报错,返回默认值
- 遍历
"""
for 变量 in 字典:
循环体
注意:变量取到的是字典的键
"""
- 增、改
- 字典[键] = 值 - 当键不存在的时候添加键值对,当键存在的时候修改指定键对应的值。
- 删
- del 字典[键] - 删除字典中指定键对应的键值对
- 字典.pop(键) - 取出字典中指定键对应的值
- 字典推导式
- 变量 = {键 : 值 for 变量 in 序列}
字典的相关操作及方法
-
运算符
字典不支持比较运算符(比较大小)和数字运算符(而列表支持)
-
in 和 not in
键 in 字典 - 判断字典中是否存在指定键对应键值对
键 not in 字典 - 判断字典中是否不存在指定键对应键值
-
相关函数:len、dict
- dict(数据) - 将指定数据转换成字典。
数据的要求:a.数据本身是一个序列
b.序列中的元素必须是有且只有两个元素的小序列
c.小序列中的第一个元素必须是不可变的数据 - 字典转其他序列 - 其他序列获取的是字典中的key
- 字典相关方法
- 字典.clear() - 清空字典
- 字典.copy() - 浅拷贝一个字典,返回一个新字典
- 字典.keys() - 获取字典所有的键,返回值是序列
- 字典.values() - 获取字典所有的值,返回值是序列
- 字典.items() - 将字典转换为元素是元组的序列(一个键值对对应一个元组)
- 字典.setdefault(键,值) - 添加键值对(键存在时不会修改对应的键值对)
- 字典.update(序列) - 将序列中的元素添加到字典中(序列必须是可以转换成字典的序列)
集合
- 什么是集合(set)
"""
集合是容器型数据类型(序列),将{}作为容器标志,里面多个元素用逗号隔开:{元素1,元素2,...}
集合是可变的(支持增删改);无序的(不支持下标操作)
集合的元素:必须是不可变的数据;唯一的
"""
- 空集合
- 集合无序
- 集合的元素是不可变的数据
- 集合元素是唯一的
- 集合的增删改查
-
查 - 只有遍历
-
增
集合.add(元素) - 在集合中添加指定元素
集合.update(序列) - 将序列中所有的元素都添加到集合中
-
删
集合.remove(元素) - 删除指定元素,元素不存在会报错
集合.discard(元素) - 删除指定元素,元素不存在不会报错
集合运算
-
数学集合运算:数学集合运算:& (交集)、 |(并集)、-(差集)、^(对称差集)、>= <=(判断是否是真子集)、> <(判断是否是子集)
-
集合1 & 集合2 - 交集(获取两个集合公共部分)
-
集合1 | 集合2 - 并集(将两个集合合并产生一个新的集合)
-
集合1 - 集合2 - 差集(去掉集合1中包含在集合2中的数据)
-
集合1 ^ 集合2 - 对称差集(将集合1和集合2合并再减去公共部分)
-
集合1 > 集合2 - 判断集合2是否是集合1的真子集
集合1 >= 集合2 - 判断集合2是否是集合1的子集
-
数学数据
python中数学相关的类型有4种:int、float、bool、complex
-
complex - 复数
- python中复数的格式:a + bj(j是虚数单位,j**2 == -1,b是1的时候不能省)
- python的复数直接支持复数运算
-
将浮点数转换成整数
- int(浮点数) - 直接去掉小数点和小数点后面的数
- math.ceil(浮点数) - 向大取整
- math.floor(浮点数) - 向小取整q
- round(浮点数) - 4舍5入取整
-
math.fabs(数字) - 获取数字的绝对值,结果是浮点数
-
abs(数字) - 获取数字的绝对值
作业:
- 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
- 求选课学生总共有多少人
- 求只选了第一个学科的人的数量和对应的名字
- 求只选了一门学科的学生的数量和对应的名字
- 求只选了两门学科的学生的数量和对应的名字
- 求选了三门学生的学生的数量和对应的名字
# 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
chin_stu = {'王聪', '程咬金', '张飞', '赵云', '刘婵', '黄忠', '郭靖'}
phy_stu = {'霍金', '达尔文', '牛顿', '伽利略', '王聪', '郭靖'}
math_stu = {'王聪', '张飞', '伽利略', '霍金', '高斯', '祖冲之'}
# 1. 求选课学生总共有多少人
stu_num = 0
for x in (chin_stu | phy_stu | math_stu):
stu_num += 1
print('学生总人数为{}'.format(stu_num))
# 2. 求只选了第一个学科的人的数量和对应的名字
only_chin_stu = chin_stu - phy_stu - math_stu
print('只选择语文的学生人数为{},对应名字为{}'.format(len(only_chin_stu), only_chin_stu))
# 3. 求只选了一门学科的学生的数量和对应的名字
only_one_stu = chin_stu ^ phy_stu ^ math_stu-(chin_stu & phy_stu & math_stu)
print('只选择一门的学生人数为{},对应名字为{}'.format(len(only_one_stu), only_one_stu))
# 4. 求只选了两门学科的学生的数量和对应的名字
only_two_stu = (chin_stu & phy_stu) | (chin_stu & math_stu) | (phy_stu & math_stu) - (chin_stu & phy_stu & math_stu)
print('只选择两门的学生人数为{},对应名字为{}'.format(len(only_two_stu), only_two_stu))
# 5. 求选了三门学生的学生的数量和对应的名字
all_stu = chin_stu & phy_stu & math_stu
print('同时选择三门的学生人数为{},对应名字为{}'.format(len(all_stu), all_stu))
2.视频作业代码如下:
students = []
print('===================================================================')
print('欢迎程明明:')
print('')
print(' 1.添加学生')
print(' 2.查看学生')
print(' 3.修改学生')
print(' 4.删除学生')
print(' 5.返回')
print('===================================================================')
num0 = input('请选择(1-5):')
if num0 == '1':
while True:
name0 = input('请输入学生姓名:')
age0 = input('请输入学生的年龄:')
tel0 = input('请输入学生电话:')
dict0 = {'姓名': name0, '年龄': int(age0), '电话': tel0}
students.append(dict0)
print('添加成功!');print('1.继续');print('2.返回')
num1 = input('请选择(1-2):')
if num1 == '1':
pass
else:
break
elif num0 == '2':
for x in students:
print(x)
elif num0 == '3':
pass