python第七关再来一盘_7、 Python系列,七,的,集合

集合

1、什么是集合

我们可以把集合看作是没有存储value的字典,也就是说可以把集合看作是只有key的字典。

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

63dc88af8e49a63aa2fccf9f17422bbf.png

我们还是根据集合的示意图来把这些特点再来回顾一下:

7bcd2826535f15db7390f389bad073c8.png

这个示意图其实就是把字典的那个示意图中的value给去掉了,只保留了key,然后这个key呢其实就是集合保存的数据,也就是我把key也换成了数据,这样呢在计算存储位置的时候,也就是计算哈希码的时候,传入给hash函数的这个参数就是集合中保存的这个数据。

2、集合的创建

6d4ac9d544bd00754c29578c8bd9372d.png

41f0d1c874a65fdb8a63ea5489537e38.png

48372afc6f64e4798ece464d77eea185.png

3、集合间的关系

849762066f5a9c05f1fb219e0a0612c4.png

因为集合中的元素是无序的,所以顺序不重要。

c067cd5a3e3356e7cdc57804ee95e5ce.png

70548bf41c7300140bfb305cd23cead2.png

2297a8e7e7e2defa8a26db055d176dab.png

dis表示没有的意思,joint就是交集、连接的意思,所以disjoint就是没有交集。

4、集合的数学操作

25411a6a4e40d3ce0f9d7a5cceaa13d8.png

差集,它指的是包含在集合a中,但是不包含在集合b中的那部分元素。

对称差集,它指的是a、b两个集合的并集,再除去a、b两个集合的交集,就是两个集合的对称差集。

接下来我们就来学习下,如何在Python程序中集合的这4种数学操作。

5f59dda10923384b4f6f390de1bc5abc.png

222b96611f65bed9d0c6d3416a0f6b9d.png

7f51103f4aab035ff971e6dbee1e12fb.png

b792e8d10d4909b28b0b0f490060f0fd.png

2abb90dbaf50977a5f8e58b640714e23.png

208c9f24aeacbe32ca2732ddd5655a68.png

b3d7f927e5452e0c16f40da949fa7284.png

5、集合的查操作

e017158de132326540e27c6151c62279.png

6、集合的增操作

ffa776f4ad2f089ef16d70a4c434d3aa.png

大家注意,因为集合中不存在重复的数据,所以呢集合中已经存在的元素就不会再次被添加到集合中。

28f5d8aa8dbd88c43ce79157f5650ac5.png

因为集合中的元素具有唯一性,也就是说集合中不能存在重复的元素,所以不管你使用上面这两种方式中的哪一种,集合中已经存在的元素都不会被再次添加到集合中。

7、集合的删操作

231959b9f84634d4a56f74a6f79fe3c6.png

69c5b5909a4c60554fe73ddd93d61518.png

0a0abe1b86c54177c66eb9039a0a10e2.png

我调用方法pop的时候并没有指定参数,因为集合中的元素和字典是类似的,都是没有顺序的,所以我们无法指定我们要删除的那个元素,只能是不传入参数,这样就会删除任意一个元素。

1b37f6607b35fa5e4dedb35f9ba31da0.png

ebe5d60e2cb2a09e3103a16f679a66c7.png

调用clear方法,清空集合中的所有元素,再来打印s的话,它就是一个空集合了。

8、不可变集合frozenset

frozen,被冻结的,顾名思义,frozenset的意思是,被冻结的集合,也就是不可变的集合。

frozenset之于set呢就好比是tuple之于list,在前面的课程中我们已经学习了,tuple是不可变的,而list是可变的,这是list和tuple的一个最主要的区别。

同样,set是可变的,而frozenset是不可变的,这也是set与frozenset的最主要的一个区别。

c5f4e85213a6333b636733035169c6da.png

前面的课程中我们已经讲过了,只有不可变类型的对象才存在哈希值。

字典的key只能是不可变类型的对象。

frozenset可以作为set中的元素,因为我们说集合中的元素呢就相当于是把字典中的key-value对中的value去除掉。

如果我不传入任何参数的话,这样就创建了一个空frozenset对象,也就是说这个frozenset中呢不包含任何的元素。

cb21f0c0cdaa074b5959ec31d1d50877.png

与set对象的创建是类似的,我们在调用这个内置函数frozenset的时候,传入的这个参数可以是多种类型的。

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

它的第一个好处是,一旦我们创建了一个不可变类型的对象,那么它的所有数据都不能够被修改了,这样呢就不会产生由于修改数据而导致的错误;

第二个好处是,在多任务环境下,同时操作对象时,不需要加锁,所以在程序中我们应该尽可能的选择使用不可变类型的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值