python中set集合的打印 python set集合的特点_大括号


说起集合会让你想起什么?体育课?晦涩难懂的数学课?莫怕,上课的铃声已经离我们很遥远了,你还有时间消耗在我的课堂上。

Set集合是Python四个可以存储数据的结构之一,其他三个是List列表、Tuple元组和Dict字典。

Set集合的特性是:

  • 集合是无序的。
  • 集合中的元素有唯一性。集合不允许出现重复的元素。
  • 集合本身可以被修改,但是集合中包含的元素必须是不可变的类型。

Set集合的初始化

可以这样声明一个空的集合:


python中set集合的打印 python set集合的特点_并集_02


用集合函数set()可以声明一个集合类型的变量,也可以用大括号,对,大括号有点特别,我们先来看看:


python中set集合的打印 python set集合的特点_python中set集合的打印_03


用大括号我们一样可以声明一个集合类型的变量。额,你们发现了?我的集合里有两个3,哦不!不是说集合的元素不能重复吗?它怎么没出错?!


python中set集合的打印 python set集合的特点_Python_04


还好,实际赋值给变量的只是一个3。这也验证了前面所述的集合特性:集合中的元素有唯一性。这个特性很重要,我们会经常利用这个特性。做什么?

咱们来看看一个实例。我最近在写一个Pandas数据分析的教程,需要用一些学生的资料,当然不能用真实的,那是违法的。

我从网上找到百家姓,打算用它生成一些随机的名字,用到我的Pandas课程里。

百家姓来源有两个,一个是百家姓原文,还有一个号称是使用量最大的姓,这两个我都想借鉴,原文是这样的:


python中set集合的打印 python set集合的特点_python中set集合的打印_05


我简单做了一下处理。


python中set集合的打印 python set集合的特点_python 集合差集_06


把两个字符串合并成一个。


python中set集合的打印 python set集合的特点_python 集合差集_07


咱们看一下姓的个数:


python中set集合的打印 python set集合的特点_python 集合差集_08


利用Set集合的唯一性特性去重


python中set集合的打印 python set集合的特点_python中set集合的打印_09


去掉了近100个重复的姓。

这样的数据清洗、加工几乎适用于各行各业,只要你有数据,就要做这种操作,用Python操作更容易、更高效。

去重之后的数据你可以转换成列表:


python中set集合的打印 python set集合的特点_python中set集合的打印_10


也可以再从列表转换回集合:


python中set集合的打印 python set集合的特点_python中set集合的打印_11


注意:列表是以方括号包裹的数据集,而集合是以大括号包裹。

为什么我说集合用大括号有趣呢?那是因为Python除列表外,极为重要的数据类型:Dict字典,用的也是大括号。

所以当你用下面的初始化语句时,会出现错误。


python中set集合的打印 python set集合的特点_大括号_12


So,你不能这样去声明你的集合,以免在后面操作时报错。

in和not in依旧支持


python中set集合的打印 python set集合的特点_并集_13


并集

你没看出,它就是你数学所学的内容。并集就是把两个集合合并起来,要取得两个集合的并集要使用”|“运算,而不是”+“,这个有别于其他数据类型,请格外注意。


python中set集合的打印 python set集合的特点_大括号_14


注意:集合x1和x2中都有”baz“,在合并后的集合中,只保留一个。


python中set集合的打印 python set集合的特点_python 集合差集_15

并集

你还可以这样:


python中set集合的打印 python set集合的特点_python中set集合的打印_16


作用一样。

交集

交集就是只保留参与计算的集合中都存在的元素。


python中set集合的打印 python set集合的特点_python 集合差集_17


很多时候对于海量数据而言,重要的数据是不能随便删除的,更多的时候我们只是希望知道问题在哪?然后再想办法解决。

交集的作用就在于此,全校的同学资料,重复出现在了几个班,如果手工对比效率低下,还容易出错。使用交集很快就能找出这几个人来。


python中set集合的打印 python set集合的特点_大括号_18

交集

你还可以这样:


python中set集合的打印 python set集合的特点_大括号_19


作用一样。

差集

差集是去除集合A中出现在集合B中的元素。


python中set集合的打印 python set集合的特点_大括号_20


例中x1只有’baz‘出现在x2中,所以被剔除。


python中set集合的打印 python set集合的特点_python 集合差集_21

差集

你还可以这样:


python中set集合的打印 python set集合的特点_python中set集合的打印_22


作用一样。

对称差集

这个叫法很拗口,其实就是取集合 A 和 B 中不属于 A&B 的元素。

这个要先看图示:


python中set集合的打印 python set集合的特点_Python_23

对称差集

运算时这样的:


python中set集合的打印 python set集合的特点_python 集合差集_24


还是有一个对应的函数:


python中set集合的打印 python set集合的特点_Python_25


作用一样。

下面是并集、交集、差集和对称差集的示意图。


python中set集合的打印 python set集合的特点_并集_26


最后说一下,Set交集可以添加和删除元素,由于用的不多,我在下面放个例子,有时间可自行联系。


python中set集合的打印 python set集合的特点_python 集合差集_27


集合我们就讲到这,后面的课程中如果有涉及,我们还会深入讨论。