说起集合会让你想起什么?体育课?晦涩难懂的数学课?莫怕,上课的铃声已经离我们很遥远了,你还有时间消耗在我的课堂上。
Set集合是Python四个可以存储数据的结构之一,其他三个是List列表、Tuple元组和Dict字典。
Set集合的特性是:
- 集合是无序的。
- 集合中的元素有唯一性。集合不允许出现重复的元素。
- 集合本身可以被修改,但是集合中包含的元素必须是不可变的类型。
Set集合的初始化
可以这样声明一个空的集合:
用集合函数set()可以声明一个集合类型的变量,也可以用大括号,对,大括号有点特别,我们先来看看:
用大括号我们一样可以声明一个集合类型的变量。额,你们发现了?我的集合里有两个3,哦不!不是说集合的元素不能重复吗?它怎么没出错?!
还好,实际赋值给变量的只是一个3。这也验证了前面所述的集合特性:集合中的元素有唯一性。这个特性很重要,我们会经常利用这个特性。做什么?
咱们来看看一个实例。我最近在写一个Pandas数据分析的教程,需要用一些学生的资料,当然不能用真实的,那是违法的。
我从网上找到百家姓,打算用它生成一些随机的名字,用到我的Pandas课程里。
百家姓来源有两个,一个是百家姓原文,还有一个号称是使用量最大的姓,这两个我都想借鉴,原文是这样的:
我简单做了一下处理。
把两个字符串合并成一个。
咱们看一下姓的个数:
利用Set集合的唯一性特性去重:
去掉了近100个重复的姓。
这样的数据清洗、加工几乎适用于各行各业,只要你有数据,就要做这种操作,用Python操作更容易、更高效。
去重之后的数据你可以转换成列表:
也可以再从列表转换回集合:
注意:列表是以方括号包裹的数据集,而集合是以大括号包裹。
为什么我说集合用大括号有趣呢?那是因为Python除列表外,极为重要的数据类型:Dict字典,用的也是大括号。
所以当你用下面的初始化语句时,会出现错误。
So,你不能这样去声明你的集合,以免在后面操作时报错。
in和not in依旧支持
并集
你没看出,它就是你数学所学的内容。并集就是把两个集合合并起来,要取得两个集合的并集要使用”|“运算,而不是”+“,这个有别于其他数据类型,请格外注意。
注意:集合x1和x2中都有”baz“,在合并后的集合中,只保留一个。
并集
你还可以这样:
作用一样。
交集
交集就是只保留参与计算的集合中都存在的元素。
很多时候对于海量数据而言,重要的数据是不能随便删除的,更多的时候我们只是希望知道问题在哪?然后再想办法解决。
交集的作用就在于此,全校的同学资料,重复出现在了几个班,如果手工对比效率低下,还容易出错。使用交集很快就能找出这几个人来。
交集
你还可以这样:
作用一样。
差集
差集是去除集合A中出现在集合B中的元素。
例中x1只有’baz‘出现在x2中,所以被剔除。
差集
你还可以这样:
作用一样。
对称差集
这个叫法很拗口,其实就是取集合 A 和 B 中不属于 A&B 的元素。
这个要先看图示:
对称差集
运算时这样的:
还是有一个对应的函数:
作用一样。
下面是并集、交集、差集和对称差集的示意图。
最后说一下,Set交集可以添加和删除元素,由于用的不多,我在下面放个例子,有时间可自行联系。
集合我们就讲到这,后面的课程中如果有涉及,我们还会深入讨论。