python基础 -08- 数据类型(set)

 集合跟我们学的列表有点像,也是可以存一堆数据,不过它有几个独特的特点,令其在整个Python语言中占有一席之地,

  1. 里面的元素不可变,代表你不能存一个list、dict 在集合里,字符串、数字、元组等不可变类型可以存
  2. 天生去重,在集合里没办法存重复的元素
  3. 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,如集合{3,4,5}和{3,5,4}算作同一个集合

基于上面的特性,我们可以用集合来干2件事,去重和关系运算

去重
lans = ["Java", "Vue", "Java", "Vue", "Python"]
print("langs去重:", list(set(lans)))

 输出

langs去重: ['Java', 'Python', 'Vue']

查询
print("类型:", type(lan))
print("信息:", lan)
print("长度:", len(lan))
print("是否存在Java:", "Java" in lan)

 输出

类型: <class 'set'>
信息: {'Java', 'Python', 'Ruby', 'Vue'}
长度: 4
是否存在Java: True

新增
lan.add("Golang")
print("新增一个数值后:", lan)
lan.add(("Netty", "SpringBoot", "ShardingSphere"))
print("新增一个元组后:", lan)

 输出

新增一个数值后: {'Java', 'Golang', 'Ruby', 'Python', 'Vue'}
新增一个元组后: {'Java', 'Golang', 'Ruby', 'Python', 'Vue', ('Netty', 'SpringBoot', 'ShardingSphere')}

删除
lan.discard("Vue")  # 如果这个值不存在,do nothing.
lan.remove("Java")  # 如果这个值不存在,报错
lan.pop()  # 随机删除
print("删除三个元素后:", lan)
lan.clear()
print("全部删除:", lan)

 输出

删除三个元素后: {'Ruby', 'Python', ('Netty', 'SpringBoot', 'ShardingSphere')}
全部删除: set()

修改(想p吃)
关系运算
print("lan的值:", lan)
print("lans:", set(lans))

print("lan和lans的交集1:", lan.intersection(set(lans)))
print("lan和lans的交集2:", lan & set(lans))

print("lan和lans的并集1:", lan.union(set(lans)))
print("lan和lans的并集2:", lan | set(lans))

print("lan和lans的差集1(lan-langs):", lan.difference(set(lans)))
print("lan和lans的差集1(lans-lan):", set(lans).difference(lan))
print("lan和lans的差集2(lan-langs):", lan - set(lans))
print("lan和lans的差集2(lans-lan):", set(lans) - lan)

print("对称差集1(去掉两个集合中都存在的):", lan.symmetric_difference(set(lans)))
print("对称差集2(去掉两个集合中都存在的):", lan ^ set(lans))



print("lan和lans是否不相交:", lan.isdisjoint(lans))
print("lan是否包含lans:", lan.issuperset(lans))
print("lans是否包含lan:", lan.issubset(lans))

lan.difference_update(set(lans))
print("lan和lans的差集并更新(lan-langs):", lan)
lan.intersection_update(set(lans))
lan.symmetric_difference_update(set(lans))

 输出

lan的值: {('Netty', 'SpringBoot', 'ShardingSphere'), 'Python', 'Ruby'}
lans: {'Python', 'Java', 'Vue'}

lan和lans的交集1{'Python'}
lan和lans的交集2{'Python'}

lan和lans的并集1{'Java', 'Vue', 'Python', ('Netty', 'SpringBoot', 'ShardingSphere'), 'Ruby'}
lan和lans的并集2{'Java', 'Vue', 'Python', ('Netty', 'SpringBoot', 'ShardingSphere'), 'Ruby'}

lan和lans的差集1(lan-langs){('Netty', 'SpringBoot', 'ShardingSphere'), 'Ruby'}
lan和lans的差集1(lans-lan){'Vue', 'Java'}
lan和lans的差集2(lan-langs){('Netty', 'SpringBoot', 'ShardingSphere'), 'Ruby'}
lan和lans的差集2(lans-lan){'Vue', 'Java'}

对称差集1(去掉两个集合中都存在的){'Java', 'Vue', 'Ruby', ('Netty', 'SpringBoot', 'ShardingSphere')}
对称差集2(去掉两个集合中都存在的){'Java', 'Vue', 'Ruby', ('Netty', 'SpringBoot', 'ShardingSphere')}


lan和lans是否相交: False
lan是否包含lans: False
lans是否包含lan: False

lan和lans的差集并更新(lan-langs){'Golang', ('Netty', 'SpringBoot', 'ShardingSphere'), 'Ruby'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值