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}
图示如下:
9. 计算两个集合的交集
假设我们有如下两个集合:
s1 = {1,2,3,4}
s2 = {3,4,5,6}
我们希望计算两个集合的交集,也就是求上述两个集合中的公共元素所构成的集合,此时我们可以使用intersection
函数,样例如下:
s3 = s1.intersection(s2)
# s3 will be {3,4}
图示如下:
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}
图示如下:
11. 总结
本文重点介绍了Python中集合set
常见的操作和相应的应用场景,并给出了相关代码示例。