Python 3.6零基础入门与实战
上QQ阅读APP看书,第一时间看更新

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)集合主要的作用就是去重,通过结果可以看到,使用交集时,两个集合中相同的元素都被去掉了。