第五节课 集合与字典 讲课老师:风陨老师
2021/4/2.
一、集合 set {}
1、定义:空集合只能用set()来定义 不能直接定义,直接定义结果为字典类型
列:a = {}
print(type(a)) 结果为 dict 字典
a = set{a}
print(type(a)) 结果为 set 集合
a = {1, 2, 3, 4,}
print(type(a)) 结果为 set 集合
已知集合不用set来定义
2、特性:
(1)、唯一性 集合具有唯一性 不会同时存在相同的元素,会自动去重。
列:a = {1, 2, 3, 1, 2}
print(a) 结果为 {1, 2, 3}
(2)、无序性 不存在顺序,不能通过索引查找
列:a = {1, 2, 3}
print(a.[2]) 结果报错
(3)、可变性 set集合 属于可变对象
3、集合的 交集 并集 差集
(1)、交集 & 两组集合中相同的元素
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a & b) 结果为{3, 4}
(2)、 并集 | 两组集合中 合并在一起的结果,自动去重。
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) 结果为{1, 2, 3, 4, 5, 6}
(3)、 差集 - ab两组集合中,a-b为a 的差集 b-a为b 的差集
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a - b) 结果为a的差集{1, 2}
print(b - a) 结果为b的差集{5, 6}
4、集的基本操作
(1)、增 :
① add 单个添加元素 不能添加元组和列表否则报错
a = {1, 2, 3, 4}
print(a.add(5)) 结果为{1, 2, 5, 3, 4}
无序性,添加到任意一个位置
② update 批量添加 会被拆分 {‘f’, 1, 2, 3, 4, ‘d’, ‘c’, ‘e’, ‘a’, ‘b’}
a = {1, 2, 3, 4}
print(a.update('abcdef')
结果为{'f', 1, 2, 3, 4, 'd', 'c', 'e', 'a', 'b'}
注意:因为集合的无序性,每次打印结果不一样
小知识: 如果不想增加的数据被拆分就加上列表[]
列:a = {1, 2, 3, 4}
print(a.update(['abc', 'dxy']))
结果为{'abc', 1, 2, 3, 4, 'dxy'}
(2) 删
① pop 随机删除
a = {1, 2, 'x', 3, 'y', 4}
a.pop()
print(a) 结果为{1, 2, 'y', 3, 4}
② remove 指定已知元素 不存在的值会报错
a = {1, 2, 'x', 3, 'y', 4}
a.remove('y')
print(a) 结果为{1, 2, 3, 4, 'x'}
a.remove('b') 结果报错 不存在的值会报错
③ discard 指定元素删除 不存在的值不会报错
a = {1, 2, 'x', 3, 'y', 4}
a.discard('x')
print(a) 结果为 {1, 2, 3, 4, 'y'}
a.discard(9) 结果为 {3, 1, 'x', 2, 'y', 4}
结果不会报错
(3)、查
① isdisjoint () 判断2组集合是否没有交集 有就返回 False 没有就true
a = {1, 2, 3, 'y', 4}
b = {2, 3, 'y', 4, 5}
print(b.isdisjoint(a)) 返回 False
print(a.isdisjoint(b)) 返回 False
② issubset () 判断a是否为b的子集
a = {1, 2, 3, 'y', 4}
b = {1, 2, 3, 'y', 4, 5}
pritn(a.issubset(b)) 返回 True
b包括a 所以的元素
③ issuperset () 判断b是否为a的子集
a = {1, 2, 3, 'y', 4}
b = {1, 2, 3, 'y', 4, 5}
print(a.issuperset(b)) 返回 False
④ union() 查两组集合的并集
a = {1, 2, 3, 'y', 4}
b = {1, 2, 3, 'x, 4, 5}
print(a.union(b)) 结果为 {1, 2, 3, 4, 5, 'y', 'x'}
二、字典
定义:字典 dict {键 key 值value 对}
a = {'x':3 , 'y':4}
print(type(a)) 结果为字典类型
字典特性: 1、必须是键值对的形式存在 2、键只能是唯一的 3、可变性 4、36版前是无序
查看方法 取键获取值
a = {'x':3 , 'y':4}
print(a['x']) 结果为3
a[x] = 123
print(a['x']) 结果为 123
通过键取值,重新赋值
小知识: 可以用赋值方法
b = a.copy()
print() 结果为 a = {'x':3 , 'y':4}
字典的基本方法
1、增 setdefault 有则查,无则增 查的数据没有的情况下默认为空(none)设置值就增加
a = {'x':3 , 'y':4}
print(a.setdefault('x') 结果为3
print(a.setdefault('z') 结果为空(None)
print(a.setdefault('z', 7) 结果为7
print(a) 结果为a = {'x':3 , 'y':4,'z':7}
2、删
(1)、 clear 情空
a = {'x':3 , 'y':4}
print(a.clear()) 结果为 {}
清空字典里的所有数据
(2)、pop 通过键 key 删除
a = {'x':3 , 'y':4}
print(a.pop('x')) 结果为 {'y': 4}
(3)、popitem 从右往左删
a = {'x':3 , 'y':4}
a.popitem('x')
print(a) 结果为 {'x':3}
3、改
update 有则改 无则增
a = {'x':3 , 'y':4}
a.upadte({'x':5})
print(a) 结果为{'x':5 , 'y':4}
a.update({'x':5, 'z':2})
print(a) 结果为{'x':5 , 'y':4, 'z':2}
4、查
(1) get 通过键查值
a = {'x':3 , 'y':4}
a.get('x') 结果为3
注意: a.get('z') 结果为None 空 不会报错
(2) keys 查看所有的键
a = {'x':3 , 'y':4}
print(a.keys())
结果为(['x', 'y' ]) 可迭代的对象 不可通过索引取值
(3) valuse 查看所有的值
a = {'x':3 , 'y':4}
print(a.valuse) 结果为([3, 4 ])
(4) items 以列表的形式返回可遍历的元组数组
a = {'x':3 , 'y':4}
print(a. items()) 结果为 ([('x', 3), ('y', 4)])
重点 可变和不可变
1、可变 改变之后 内存地址不会改变 列表,字典 集合 字符串
2、不可变 改变之后内存地址发生改变 数字, 元组
3、列表 嵌套
a = ['x',[1, 2, 3]]
a[1][1] = 'x'
print(a) 结果为['x', [1, 'x', 3]]
先取值再更改