2.8 集合
集合是一组无序的不能重复的元素,这个和列表、元组不同,虽然也是一组元素,但因为是无序的,所以无法使用[]索引的方式访问。集合不能重复,其作用就是去重(去掉重复数据)。本节将介绍集合的使用。
2.8.1 使用集合
要使用集合,就需要用set函数,这类要注意,其他序列(列表、元组)等都是通过()、[]直接定义,而集合不是,相当于是通过set函数将数据转换为集合。因此很多教程也不把集合当作Python的标准数据类型。
使用集合的方式如下:
set1=set([1,200,39,50]) set2=set(['王晓光','男']) print(set1) print(set2)
上述集合的输出结果如下:
{200, 1, 50, 39} {'男', '王晓光'}
从结果可以看出,集合并没有按定义的顺序输出。在Python中,集合是无序的,打印结果取决于其内部存储结构和输出方式。
说 明
也可以先创建一个列表,然后使用set函数将列表转化为集合,如list1=[45,68,98]、set1=set(list1)。
如果不使用[]的方式,直接定义一个字符串集合:
set1=set('hello') print(set1)
从输出结果可以看出,重复的字母会被删除:
{'o', 'l', 'h', 'e'}
集合中的元素不能重复,假如定义以下带有重复元素的集合:
set1=set([1,200,200,39,50])
在使用时该集合并不会报错,但会默认将重复的值去掉,上述代码输出结果为:
{200, 1, 50, 39}
2.8.2 集合常用的内置函数
集合虽然是无序的,但在创建后还可以添加、更新等。Python为集合提供了一些内置函数,如表2.10所示。
表2.10 集合常用的内置函数
下面举例:
【示例2-28】
输出结果如图2.16所示。
图2.16 集合内置函数应用
这里有几点需要注意:
(1)discard和remove虽然都是删除元素,但如果指定的元素不存在,则discard依然会继续执行,remove会报错终止程序执行。
(2)pop删除元素时是随机的。
(3)复制集合时,从结果可以看出,复制后的集合顺序和原集合顺序并不相同。
(4)clear只是清空集合的内容,如果要删除集合,还是使用del set1这种方式。
2.8.3 集合常用运算符(交集、并集、差集、对称差集)
在数学中,由一个或多个确定的元素所构成的整体叫作集合。数学中的集合有三大特性:
• 确定性(集合中的元素必须是确定的)
• 互异性(集合中的元素互不相同)
• 无序性(集合中的元素没有先后之分)
通过前面对Python中集合的学习,我们会发现,Python中的集合和数学中的集合一样。数学中的集合有一些运算,如交集、并集等,Python中也一样,可用来进行一些科学计算。
本小节介绍的集合常用运算符主要有4个:
• set1 | set2 :set1和set2的并集。
• set1 & set2 :set1和set2的交集。
• set1 - set2 :差集(元素在set1中,但不在set2中)。
• set1 ^ set2 :对称差集(元素在set1或set2中,但不会同时出现在两者中)。
相对于集合的这些数学操作,Python也提供了一些内置函数用于科学计算,参见表2.11。
表2.11 用于科学计算的内置函数
下面举例,首先创建两个数据集合:
【示例2-29】
输出结果如图2.17所示。
图2.17 科学计算函数的应用
使用这些集合运算时要注意以下几点:
(1)代码中使用差集时,因为本例set1集合中的内容都在set2中,所以举例时用的set2.difference(set1))并不是set1.difference(set2)),其他运算都是set1.xxx形式。
(2)因为issubset和issuperset只是判断,所以返回的是True或False,并不返回新的集合,而其他运算都会返回新的集合,从输出结果中也可以看到。
(3)使用内置函数或使用-、&、| 、<=等运算符的结果是一样的。
(4)集合主要的作用就是去重,通过结果可以看到,使用交集时,两个集合中相同的元素都被去掉了。