Day7_字典和集合

Day7_字典和集合

笔记:

字典

  1. 什么是字典
"""
字典是容器型数据类型(序列),将{}作为容器标志,里面多个元素用逗号隔开(每个元素必须是键值对)
                         {键1:值1,键2:值2,...}
字典是可变的(支持增删改);字典无序
键:是不可变的数据(数字、字符串、元组);键是唯一的
值:值才是字典真正想要保存的数据,键的作用就像列表中的下标来对值进行区分的
"""
  • 空字典 ‘ {} ’

  • 字典无序

  • 键是不可变的

  • 键是唯一的

  1. 查 - 获取值
  • 查单个:
    • 字典[键] - 获取字典中指定键对应的值,键不存在会报错
    • 字典.get(键) - 获取字典中指定键对应的值,不存在不会报错,返回None
    • 字典.get(键,默认值) - 获取字典中指定键对应值,不存在不会报错,返回默认值
  • 遍历
"""
for 变量 in 字典:
    循环体
注意:变量取到的是字典的键
"""
  1. 增、改
  • 字典[键] = 值 - 当键不存在的时候添加键值对,当键存在的时候修改指定键对应的值。
  • del 字典[键] - 删除字典中指定键对应的键值对
  • 字典.pop(键) - 取出字典中指定键对应的值
  1. 字典推导式
  • 变量 = {键 : 值 for 变量 in 序列}

字典的相关操作及方法

  1. 运算符

    字典不支持比较运算符(比较大小)和数字运算符(而列表支持)

  2. in 和 not in

    键 in 字典 - 判断字典中是否存在指定键对应键值对

    键 not in 字典 - 判断字典中是否不存在指定键对应键值

  3. 相关函数:len、dict

  • dict(数据) - 将指定数据转换成字典。
    数据的要求:a.数据本身是一个序列
    b.序列中的元素必须是有且只有两个元素的小序列
    c.小序列中的第一个元素必须是不可变的数据
  • 字典转其他序列 - 其他序列获取的是字典中的key
  1. 字典相关方法
  • 字典.clear() - 清空字典
  • 字典.copy() - 浅拷贝一个字典,返回一个新字典
  • 字典.keys() - 获取字典所有的键,返回值是序列
  • 字典.values() - 获取字典所有的值,返回值是序列
  • 字典.items() - 将字典转换为元素是元组的序列(一个键值对对应一个元组)
  • 字典.setdefault(键,值) - 添加键值对(键存在时不会修改对应的键值对)
  • 字典.update(序列) - 将序列中的元素添加到字典中(序列必须是可以转换成字典的序列)

集合

  1. 什么是集合(set)
"""
集合是容器型数据类型(序列),将{}作为容器标志,里面多个元素用逗号隔开:{元素1,元素2,...}
集合是可变的(支持增删改);无序的(不支持下标操作)
集合的元素:必须是不可变的数据;唯一的
"""
  • 空集合
  • 集合无序
  • 集合的元素是不可变的数据
  • 集合元素是唯一的
  1. 集合的增删改查
  • 查 - 只有遍历

  • 集合.add(元素) - 在集合中添加指定元素

    集合.update(序列) - 将序列中所有的元素都添加到集合中

  • 集合.remove(元素) - 删除指定元素,元素不存在会报错

    集合.discard(元素) - 删除指定元素,元素不存在不会报错

集合运算

  1. 数学集合运算:数学集合运算:& (交集)、 |(并集)、-(差集)、^(对称差集)、>= <=(判断是否是真子集)、> <(判断是否是子集)

    1. 集合1 & 集合2 - 交集(获取两个集合公共部分)

    2. 集合1 | 集合2 - 并集(将两个集合合并产生一个新的集合)

    3. 集合1 - 集合2 - 差集(去掉集合1中包含在集合2中的数据)

    4. 集合1 ^ 集合2 - 对称差集(将集合1和集合2合并再减去公共部分)

    5. 集合1 > 集合2 - 判断集合2是否是集合1的真子集

      集合1 >= 集合2 - 判断集合2是否是集合1的子集

数学数据

python中数学相关的类型有4种:int、float、bool、complex

  1. complex - 复数

    1. python中复数的格式:a + bj(j是虚数单位,j**2 == -1,b是1的时候不能省)
    2. python的复数直接支持复数运算
  2. 将浮点数转换成整数

    1. int(浮点数) - 直接去掉小数点和小数点后面的数
    2. math.ceil(浮点数) - 向大取整
    3. math.floor(浮点数) - 向小取整q
    4. round(浮点数) - 4舍5入取整
  3. math.fabs(数字) - 获取数字的绝对值,结果是浮点数

  4. abs(数字) - 获取数字的绝对值

作业:

  1. 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
    1. 求选课学生总共有多少人
    2. 求只选了第一个学科的人的数量和对应的名字
    3. 求只选了一门学科的学生的数量和对应的名字
    4. 求只选了两门学科的学生的数量和对应的名字
    5. 求选了三门学生的学生的数量和对应的名字
# 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值