25 集合与组合
集合中的元素都是不重复的
大纲
什么是集合
数学中的组合
什么是集合
前面的课程中我们学习了一些有用的数据类型,例如列表和字典,它们都可以处理一系列的数据,只是侧重点不同。有时候我们还希望从一个新角度来处理数据,例如说去除重复的元素。此时,集合就是一种非常有用的数据类型,我们来看一下python中如何来操纵集合。
x_list是一个列表,包括了四个元素,其它有两个是重复的,下面使用set来将它变成一个没有重复值的集合。
我们可以从一个list来通过set函数来创建集合,可以看到集合的最重要特点在于,集合中的元素没有重复值。集合也可以通过大括号来定义,重复元素会被去除掉。
一个经常用到的技巧是先创建一个空的集合,然后会往里面添加元素。
类似列表一样,可以用in来判断元素是否处于集合之中。
集合运算的特点在于可以计算并集、交集等运算。例如我们来看下面两个集合。
可以通过运算符|来计算到并集
通过&来计算得到交集
通过比较符来看一个集合是否另一个集合的子集。
还可以计算出一个集合中哪些元素是另一个集合中没有的。
还可以通过update函数来将两个集合的元素进行合并。
小结:集合和列表的区别是集合中的元素不会重复,而且不同集合间可以进行求交集,求并集等集合特有的操作处理。
数学中的组合
如果你有10张扑克牌,从这些牌中随意抽二张牌出来做一个组合,这种不重复的组合会有多少种呢,这是数学上经典的组合问题。我们先用一个有5个数字元素的集合来看一下。
这里我们定义了两个集合,分别都是由1到5这五个数字构成的,注意我们使用了copy函数,使y_set的内容和x_set一样。
然后用一个循环来遍历集合x,当x的某个数字取出来时,我们并不需要x和y重复的数字,所以使用remove函数把y中的数字删除,然后再用一个嵌套循环来遍历集合y。这样可以看到两个集合的组合最终会是什么样子。
用这个思路,我们来定义一个函数combin,这个函数的基本代码都是上面所讲到的双重循环,只不过增加的部分是用到一个列表output_list来存放组合后的元素,要注意一点,这里(x,y)组合对,我们叫作元组,元组和列表很相似,你也可以用方括号来代替,构成一个列表。
这个函数可以对x_set这个数字集合进行组合遍历,得到所有可能的两两组合。输入的内容可以不止是数字,也可以是字符串的一个集合。
和排序是类似的,我们虽然自己写了一个组合函数,其实python内部也有现成的组合函数,可以直接使用。不过要注意的是,这些内置函数是存放在一些模块中,我们需要告诉程序,我们需要从某个仓库里取出某个函数工具来用,这种操作称为加载模块。例如我们来加载导入一个模块中的函数
上面的代码就是从itertools模块中,加载导入了其中一个叫作 combinations的函数。就好比是我们安装好的python是一个大大的仓库,仓库中的工具需要拿出来放到操作台上才能使用,加载导入就是这个动作。加载后就可以自由的使用这个函数了,这个函数有一个参数就是组合的方式,可以构成两元素组合,也可以三元素组合。
小结:可以用集合来解决组合问题,python中有很多工具,这些工具需要加载导入才能使用,加载导入的语句就是from 某个模块 import 某个工具。其中计算组合的工具就叫做combinations。
Last updated
Was this helpful?