集合的增删改
# 集合是一个不重复的无序的数据类型,可以使用{}或set来表示
# {} 有两种意思:字典、集合
# {} 里如果放的是键值对就是字典,如果放的是单个值就是集合
person = {'name' : 'zhangsan', 'age' : 18} # 字典
x = {'hello', 1, 'good'} # 集合
# 如果有重复的数据,会自动去除
names = {'zhangsan','lisi','jack','tony','jack','lisi'}
print(names) # {'tony', 'jack', 'zhangsan', 'lisi'}
# set也可以进行增删改查
# 增
names.add('阿珂') # 添加一个集合,添加位置随机
print(names) # {'lisi', '阿珂', 'jack', 'tony', 'zhangsan'}
# 删
names.remove('lisi') # 2.指定删除一个元素
print(names) # {'tony', 'jack', '阿珂'}
names.pop() # 1.随机删除一个
print(names) # {'阿珂', 'lisi', 'jack', 'tony'}
# 空集合的表示方式不是{},{}表示的是空字典;用set()来表示
names.clear() # 3.清空
print(names) # set()
# 改
# 1.拼接:A.update(B)将B拼接到A里
a = {'刘一','陈二','张三','李四','王五'}
b = {'刘能','赵四','刘德华'}
a.update(b) # 可以是元组\列表等,只要是可迭代对象就可以
print(a) # {'陈二', '刘德华', '刘一', '刘能', '赵四', '王五', '张三', '李四'}
# 2.union 将多个集合合并成一个新的集合
c = {'刘备',18,'hello','曹操'}
c.union(b) # {'hello', '刘备', 18, '曹操'}
print(c)
d = c.union(b) # 可以是元组\列表等,只要是可迭代对象就可以
print(d) # {18, '赵四', 'hello', '刘备', '刘德华', '曹操', '刘能'}
# 没有查询,因为无序的;但是可以判断
print('张三' in a) # True
集合的运算符
first = {'李白', '白居易', '李清照', '杜甫', '王昌龄', '王维', '孟浩然', '王安石'}
dsecond = {'李商隐', '杜甫', '李白', '白居易', '岑参', '王昌龄'}
rthird = {'李清照', '刘禹锡', '岑参', '王昌龄', '苏轼', '王维', '李白'}
# set支持很多算数运算符,但是不支持加法
# print(first + dsecond) # 报错
# -差集(减法)
print(first - dsecond) # {'孟浩然', '王维', '王安石', '李清照'} A-B求A和B的差集
print(dsecond - first) # {'李商隐', '岑参'}
# & 交集(求两边都有的)
print(first & dsecond) # {'王昌龄', '杜甫', '李白', '白居易'}
# | 并集(相加,重复的保留一个)
print(first | dsecond) # {'孟浩然', '李清照', '王安石', '白居易', '王昌龄', '杜甫', '王维', '李白', '李商隐', '岑参'}
# ^ 差集的并集(相加,重复的一个不保留;置保留各自独有的)
print(first ^ dsecond) # {'王安石', '李清照', '王维', '李商隐', '岑参', '孟浩然'}
集合去重排序
# 去重排序
nums = [5, 8, 7, 6, 4, 1, 3, 5, 1, 8, 4]
甲 = set(nums) # 如果集合中是全数字会自动排序
print(甲) # {1, 3, 4, 5, 6, 7, 8}
乙 = list(甲)
print(乙) # [1, 3, 4, 5, 6, 7, 8]
乙.sort(reverse=True) # 反序
print(乙) # [8, 7, 6, 5, 4, 3, 1]