七、Python的集合

集合

1、什么是集合

我们可以把集合看作是没有存储value的字典,也就是说可以把集合看作是只有key的字典。
我们知道字典中的key它必须是不可变的类型,因为我们要根据key调用哈希函数hash()来计算出哈希码,也就是说key-value对的存储位置,为了保证每次存取的这个key-value对呢它是固定的,所以key要求是不可变的类型。所以集合中的数据可以是任何不可变的类型。
在这里插入图片描述

  • 我们还是根据集合的示意图来把这些特点再来回顾一下:
    在这里插入图片描述
    这个示意图其实就是把字典的那个示意图中的value给去掉了,只保留了key,然后这个key呢其实就是集合保存的数据,也就是我把key也换成了数据,这样呢在计算存储位置的时候,也就是计算哈希码的时候,传入给hash函数的这个参数就是集合中保存的这个数据。

2、集合的创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、集合间的关系

在这里插入图片描述
因为集合中的元素是无序的,所以顺序不重要。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
dis表示没有的意思,joint就是交集、连接的意思,所以disjoint就是没有交集。

4、集合的数学操作

在这里插入图片描述
差集,它指的是包含在集合a中,但是不包含在集合b中的那部分元素。
对称差集,它指的是a、b两个集合的并集,再除去a、b两个集合的交集,就是两个集合的对称差集。
接下来我们就来学习下,如何在Python程序中集合的这4种数学操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、集合的查操作

在这里插入图片描述

6、集合的增操作

在这里插入图片描述
大家注意,因为集合中不存在重复的数据,所以呢集合中已经存在的元素就不会再次被添加到集合中。
在这里插入图片描述
因为集合中的元素具有唯一性,也就是说集合中不能存在重复的元素,所以不管你使用上面这两种方式中的哪一种,集合中已经存在的元素都不会被再次添加到集合中。

7、集合的删操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我调用方法pop的时候并没有指定参数,因为集合中的元素和字典是类似的,都是没有顺序的,所以我们无法指定我们要删除的那个元素,只能是不传入参数,这样就会删除任意一个元素。
在这里插入图片描述
在这里插入图片描述
调用clear方法,清空集合中的所有元素,再来打印s的话,它就是一个空集合了。

8、不可变集合frozenset

frozen,被冻结的,顾名思义,frozenset的意思是,被冻结的集合,也就是不可变的集合。
frozenset之于set呢就好比是tuple之于list,在前面的课程中我们已经学习了,tuple是不可变的,而list是可变的,这是list和tuple的一个最主要的区别。
同样,set是可变的,而frozenset是不可变的,这也是set与frozenset的最主要的一个区别。
在这里插入图片描述

  • 前面的课程中我们已经讲过了,只有不可变类型的对象才存在哈希值。
  • 字典的key只能是不可变类型的对象。
  • frozenset可以作为set中的元素,因为我们说集合中的元素呢就相当于是把字典中的key-value对中的value去除掉。

如果我不传入任何参数的话,这样就创建了一个空frozenset对象,也就是说这个frozenset中呢不包含任何的元素。
在这里插入图片描述
与set对象的创建是类似的,我们在调用这个内置函数frozenset的时候,传入的这个参数可以是多种类型的。

前面的课程中,我们有讲到过,我们在程序中要尽量的使用不可变类型的对象,因为不可变类型的对象呢是有好处的:

  • 它的第一个好处是,一旦我们创建了一个不可变类型的对象,那么它的所有数据都不能够被修改了,这样呢就不会产生由于修改数据而导致的错误;
  • 第二个好处是,在多任务环境下,同时操作对象时,不需要加锁,所以在程序中我们应该尽可能的选择使用不可变类型的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值