day-6 散列类型(无序序列)
一,认识集合
集合(set)
集合的特性:唯一性 无序性 主要用来进行去重和逻辑判断
表示形式为:
用大括号{}包裹起来的数据 数据之间用逗号隔开
语法格式:
集合名={数据1,数据2...}
food = {'旺仔牛奶', '螺蛳粉', '热干面', '可乐鸡翅', '蜜汁小汉堡', '东坡肉'}
print(food)
num = {1, 2, 5, 1, 2, 5, 4, 3, 1, 2}
# 正常输出一个集合里面重复的元素自动去除 代表集合唯一性去重性
print(num)
# print(num[3]) # 报错 因为集合是无序类型没有下标 所以序列类型的特性
进行逻辑运算 集合逻辑运算
集合1&集合2 -- 获取交集
集合1|集合2 -- 获取并集
集合1-集合2 -- 获取差集
符号输入
& shift+7
| shift+\
- 直接减号
交集并集差集意义
交集 -- 一个数据里两个集合都共有的
并集 -- 两个集合里所有的数据(重复的数据只算一次)
差集 -- 一个集合减掉另一个集合 剩下他独有的
例: 吃饭 两个碗
a {青菜 鸡肉 胡萝卜}
b {青菜 红烧肉 牛肉}
交集:两个碗里共同都有的菜青菜
并集:两个碗里的菜都加在一起(青菜,鸡肉,胡萝卜,红烧肉,牛肉)
差集:碗之间相减 剩下独有的数据
a-b= 鸡肉 胡萝卜
b-a= 红烧肉 牛肉
class116 = {'秦锐灵', '荷包蛋', '谢斌'}
class117 = {'桑杰伦', '坤坤', '谢斌'}
# 交集
print(class116 & class117)
# 并集
print(class116 | class117)
# 差集
print(class116 - class117)
print(class117 - class116)
集合作用: 在有两个文件的时候 数据繁琐的时候 通过逻辑判断 可以帮助你找到重复的数据进行去重的操作 也可以通过交集操作去删除多余的文件
集合可以放很多数据 字符串 布尔值 整型 浮点型 元组等等 但是集合不能放列表
集合里面只能放不可修改的数据
集合里面不能放列表/集合/字典!!!
a = {'你好', 666, 6.6, True, (66, 7)}
print(a)
b = {[44, 55]}
print(b) #直接报错 因为列表是有序的强行转换会报错 虽然元组也是有序 但是元组是不可修改的保证数据的唯一
总结集合:
存储非重复的数据 自动去重的效果
进行逻辑判断 集合运算 交并差
如果检测有重复的数据 集合就不会把重复数据放到存储空间里
集合方法
增
add:增加一个数据(随机)
语法格式:集合名.add(数据)
#增
a = {'你好', 666, 6.6, True, (66, 7, 66)}
a.add(8) # 随机添加 因为无序
a.add('不良帅')
print(a)
删
pop:删除一个数据(根据版本不同有些从头开始删除或者随机删除或者从末尾删除)
语法格式:集合名.pop()
remove:删除指定的数据
语法格式:集合名.remove(数据)
clear:清空数据
语法格式:集合名.clear()
#删
a = {'你好', 666, 6.6, True, (66, 7, 66)}
# a.pop() #随机一个个删除
# a.pop()
# a.remove(666)
# a.remove(6.6)
# a.remove(6.66)# 数据不存在会报错
# a.discard(6.66) # 数据不存在情况下 不会报错
a.clear()
print(a)
二,认识字典
字典(dict)
表示形式为:字典是用大括号包裹起来的 存储数据是以键值对的方式存储 数据之间用逗号隔开 主要存储一些带有'说明'性质的数据
语法格式:
键值对:{键:值}
字典名 = {键:值,键:值,键:值.....}
字典的键是不可变类型 字典的值可以是任意类型
mes1 = {'姓名': '谭楚泽', '年龄': 18, '工资': 9.9, '姓名': '于健康'}
print(mes1)
# 字典中的键名重复的情况下 后面的会把前面的覆盖
name='谭楚泽'
name='于健康'
print(name)
字典的特性:
1.通过键值对的方式存储数据 取数据 而不是通过下标索引
2.字典里的数据是可以改变的 并且可以嵌套(字典里放字典)
3.键名是唯一性
总结:用一个更好理解和清晰的方式来保存数据 保存方式为键值对 可以把键值对的理解为变量的概念
键名==变量名 值==变量值
字典方法
查
字典跟集合一样是无序序列所以无法通过下标进行获取数据或者查询数据
通过键(key)寻找值
语法格式: 字典名[键名]
get通过键(key)获取值
语法格式: 字典名.get(键名)
其他查询方法
字典名.keys() # 获取字典中所有的键
字典名.values() # 获取字典中所有的值
字典名.items() # 获取字典中所有的键值对(键值对是以元组的形式输出)
# 查
mes1 = {'姓名': '谭楚泽', '年龄': 18, '工资': 9.9}
print(mes1['姓名'])
print(mes1.get('姓名'))
print(mes1.get('年龄'))
print(mes1.get('工资'))
print(mes1.get('兴趣')) # 查询这个键不存在返回None
print(mes1.keys())
print(mes1.values())
print(mes1.items())
改
语法格式: 字典名[键名]=新的值
# 改
mes1 = {'姓名': '吉保拉達', '年龄': 99, '工资': 5000}
mes1['姓名'] = '小北' #修改原来的数据
#也可以理解为是一个增加方法
mes1['兴趣'] = '睡觉' #创建新的键值对
print(mes1)
增
语法格式: 字典名.setdefault(键,值)
可以增加也可以修改 一次性可以添加多个键值对 数据之间逗号隔开
语法格式: 字典名.update({键:值,键:值})
# 增
# food = {'红水果': '苹果', '蓝水果': '蓝莓'}
# food.setdefault('粉水果', '桃子')
# food.setdefault('紫水果', '葡萄')
# food.setdefault('紫水果', '茄子') # 键名存在不会修改
# food.setdefault('五颜六色花里胡哨') # 没有值 默认空NONE
# print(food)
ho = {'红头发': '黄滨', '绿头发': '坤坤'}
ho.update({'黄头发': '小北', '粉头发': '谭凯', '白色中分': '叶论文'})
ho.update({'黄头发': '小李'}) # 键名存在会修改 修改键的值 如果没有就会新增
ho.setdefault('五颜六色头发') # 没有值 默认空NONE
ho.update({'五颜六色头发':'小北'})
print(ho)
删
pop: 通过键名指定删除数据
语法格式: 字典名.pop(键名)
popitem: 根据版本信息不同随机删除键值对
语法格式: 字典名.popitem()
clear: 全部清除
语法格式: 字典名.clear()
ho = {'红头发': '黄滨', '绿头发': '坤坤','黄头发': '小北', '粉头发': '谭凯','白色中分': '叶论文'}
ho.pop('黄头发') #通过键名删除
ho.pop('头发') #键名不存在是报错的
ho.popitem() #随机删除
# ho.clear() #全部清除
print(ho)
声明空变量
li=[] #声明空列表
lis=() #声明空元组
lst='' #声明一个空字符串
mo={} #声明一个空字典因为字典比集合用的多
me=set() #声明一个空集合
练习
1.有个列表[1,1,1,2,3,2,3,3,4,5,5]对它进行去重.并输出去重后的'列表'
2.有两个集合,分别为报名对应班级的学员名单,请获取里面的交集,并集与差集 全栈班={"婷婷","谢霆锋","陈奕迅","林俊杰"} 高薪班={"谢霆锋","陈奕迅","吴彦祖","彭于晏"}
3.用字典的方式给自己写一个"信息表".并进行增删改查操作(姓名,年龄,身高体重这些) 1.增加一个键值对 2.修改一个键值对 3.删除一个键值对 4.获取里面的键, 值与键值对. 通过键名,获取 "姓名"的值