我们在遇到一些问题的时候,使用集合的交集、并集和差集能够更便捷的帮助我们去解决问题,看下面一个例子。
某学校有两个班级,班级A需要学习数学、语文、英语、物理、化学和生物,班级B需要学习数学、语文、英语、政治、地理和历史。
我们可以直接看出A班级和B班级的交集为数学、语文和英语,并集为数学、语文、英语、物理、化学、生物、政治、地理、历史,A和B的差集为物理、化学和生物。
那么怎么使用Python去完成这些运算?
我们先在这里定义两个集合,
1 2 | A = { '数学' , '语文' , '英语' , '物理' , '化学' , '生物' } B = { '数学' , '语文' , '英语' , '政治' , '地理' , '历史' } |
1. 交集
我们使用集合求交集的时候可以采用两种方式,一种是使用‘&’运算符进行操作,一种是使用intersection()方法来实现。
我们通过这两种方法来分别求集合A和B的交集。
方法1——使用‘&’运算符:
1 2 3 4 | >>> A = { '数学' , '语文' , '英语' , '物理' , '化学' , '生物' } >>> B = { '数学' , '语文' , '英语' , '政治' , '地理' , '历史' } >>> A & B { '英语' , '语文' , '数学' } |
方法2——使用intersection()方法:
1 2 3 4 | >>> A = { '数学' , '语文' , '英语' , '物理' , '化学' , '生物' } >>> B = { '数学' , '语文' , '英语' , '政治' , '地理' , '历史' } >>> A.intersection(B) { '英语' , '语文' , '数学' } |
因为是求交集,因此A和B的位置调换依然不影响结果。
2. 并集
使用集合求并集的方式同样也是两种方式,一种是使用‘|’运算符进行操作,一种是使用union()方法来实现。
方法1——使用‘|’运算符
1 2 3 4 | >>> A = { '数学' , '语文' , '英语' , '物理' , '化学' , '生物' } >>> B = { '数学' , '语文' , '英语' , '政治' , '地理' , '历史' } >>> A | B { '英语' , '物理' , '语文' , '政治' , '化学' , '数学' , '生物' , '地理' , '历史' } |
方法2——使用union()方法
1 2 3 4 | >>> A = { '数学' , '语文' , '英语' , '物理' , '化学' , '生物' } >>> B = { '数学' , '语文' , '英语' , '政治' , '地理' , '历史' } >>> A.union(B) { '英语' , '物理' , '语文' , '政治' , '化学' , '数学' , '生物' , '地理' , '历史' } |
求并集的时候同样不需要注意A和B的位置关系。
3. 差集
使用集合求差集的方式同样也是两种方式,一种是使用‘-’运算符进行操作,一种是使用difference()方法来实现。
方法1——使用‘-’运算符
1 2 3 4 5 6 | >>> A = { '数学' , '语文' , '英语' , '物理' , '化学' , '生物' } >>> B = { '数学' , '语文' , '英语' , '政治' , '地理' , '历史' } >>> A - B { '物理' , '生物' , '化学' } >>> B - A { '政治' , '历史' , '地理' } |
方法2——使用difference()方法
1 2 3 4 5 6 | >>> A = { '数学' , '语文' , '英语' , '物理' , '化学' , '生物' } >>> B = { '数学' , '语文' , '英语' , '政治' , '地理' , '历史' } >>> A.difference(B) { '物理' , '生物' , '化学' } >>> B.difference(A) { '政治' , '历史' , '地理' } |
在方法2中注意A和B的位置不同的时候是有区别的,如果是A使用difference()方法,那么是输出A中有而B中没有的元素,如果是B使用difference()方法,那么是输出B中有而A中没有的元素。
4. 总结
学习完了集合,四种核心集合我们已经基本掌握,接下来几节我们来通过学习一些字符串的相关操作,学习字符串的过程中会穿插着前面简单介绍过但没仔细讲解的方法及操作。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程