第7天 | 32天学会python,数据类型之集合

集合的增删改

# 集合是一个不重复的无序的数据类型,可以使用{}或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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值