1. 引言

在Python中,集合Set是常用的数据类型之一,本文就集合相关常见的函数和操作进行汇总,方便大家查漏补缺。

闲话少说,我们直接开始吧!

2. 相关概念

2.1 定义

集合set是具有唯一元素的无序集合,它和列表很像,但它只能包含唯一的元素,同时需要注意的是集合是无序的,也就是说集合中没有第一个、第二个元素之说,通常我们只是说集合中是否含有这些元素。

2.2 用途

我们通常需要检测某个元素是否属于某个集合,举例:假设我们有一个列表list1 = [3,4,5,6],如果我们需要检查该列表中是否包含数字6,我们通常这么实现:

print(6 in [3,4,5,6])

如果我们对列表list进行in操作,此时Python将一个元素一个元素来遍历整个列表,直到它在列表中遇到数字6时,返回True。如果我们的列表含有n个元素,那么这个操作最坏的情况下将查找n次。
如果我们换成集合的实现呢?如下所示:

print(6 in {3,4,5,6})

我们在集合set中查找一个元素是非常快的,如果元素数目很多的情况下。假设我们的集合中有n个元素,对集合执行in操作仅需查找1次,相比列表查找速度极快。

3. 创建集合

我们可以使用set的构造函数创建空的集合,如下所示:

s1 = set()

当然我们也可以创建包含初始值的集合,如下所示:

s1 = {4, 5, 6}

我们通常使用花括号{}来创建一个包含多个元素的集合。集合和字典之间的区别在于,字典要求我们键入由冒号:分隔的键值对,而集合则不需要。

注意:我们只能将不可变的元素放入集合中。如果我们试图放置可以改变的元素,例如列表或字典,我们程序将会报错。

4. 集合中添加新的元素

我们一般使用add方法来给集合中添加新的元素,如下:

s1 = {3,4,5}
s1.add(6)
# s1 will be {3,4,5,6}

需要注意的是,如果我们尝试向集合中添加已经存在的元素,则不会发生任何事情,因为集合只能包含唯一的元素。样例如下:

s1 = {3,4,5}
s1.add(3)
# s1 will still be {3,4,5}

5. 判断集合中包含某元素

一般使用in操作符来判断集合中是否包含某个元素,样例代码如下:

if 6 in {3,4,5,6}:
    print("6 is inside our set")
else:
    print("not inside")

6. 计算集合的长度

集合的长度通常指的是集合中所包含元素的个数,我们可以使用内置的len函数来进行计算,样例代码如下:

s1 = {3,4,5,6}
x = len(s1)
# x will be 4, as there are 4 elements inside s1

7. 从集合中删除元素

如果我们需要从集合中删除某个元素,我们可以简单地使用.remove方法进行操作,如下所示:

s1 = {3,4,5,6}
s1.remove(6)
# s1 will now be {3,4,5}

此时,如果我们删除的元素在集合中并不存在,将会触发错误信息,如下:

s1 = {3,4,5,6}
s1.remove(7) # error

有的同学可能会说,并不希望删除的时候会触发错误,那么我们可以简单的使用discard函数,该函数和remove函数功能一样,同时在删除不存在的元素时不会触发错误。如下所示:

s1 = {3,4,5,6}
s1.discard(6)  # removes 6
s1.discard(7)  # removes nothing, but no error raised

8. 计算两个集合的并集

假设我们有如下两个集合:

s1 = {1,2,3,4}
s2 = {3,4,5,6}

我们希望计算两个集合的并集,也就是求上述两个集合中所有元素构成的集合,此时我们可以使用union函数,样例如下:

s3 = s1.union(s2)
# s3 will be {1,2,3,4,5,6}

图示如下:

python set工作空间_python set工作空间

9. 计算两个集合的交集

假设我们有如下两个集合:

s1 = {1,2,3,4}
s2 = {3,4,5,6}

我们希望计算两个集合的交集,也就是求上述两个集合中的公共元素所构成的集合,此时我们可以使用intersection 函数,样例如下:

s3 = s1.intersection(s2)
# s3 will be {3,4}

图示如下:

python set工作空间_ide_02

10. 计算两个集合的差集

假设我们有如下两个集合:

s1 = {1,2,3,4}
s2 = {3,4,5,6}

我们希望计算两个集合的差集,也就是求在集合s1同时不在集合s2中的元素所构成的集合,此时我们可以使用-操作符来获取上述两个集合的差集,样例如下:

s3 = s1 - s2
# s3 will be {1, 2}

相应地,如果我们希望找去在集合s2中而不在集合s1中的元素,我们可以这样做:

s3 = s2 - s1
# s3 will be {5, 6}

图示如下:

python set工作空间_python_03

11. 总结

本文重点介绍了Python中集合set常见的操作和相应的应用场景,并给出了相关代码示例。