关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
什么是排列和组合我就不介绍了,这个简单。不知道的看这篇文章也看不下去。
若自己来实现排列和组合比较麻烦,需要考虑各种条件判断情况等等。
其实在Python中可以用itertools模块轻松实现,这也是Python的魅力之一。
看看我翻译的漫画:
好了,回归正题。
假如,有一个项作业需要2名工作人员合作完成。当天值班共4人,求这4个人两两组合的所有情况。
用ABCD分别代表这4个工作人员。不用想其他方法处理,看看itertools怎么实现。
#coding:utf-8 import itertools #使用permutations方法 ls = itertools.combinations('ABCD', 2) #遍历所有组合情况 for l in ls: print(l)
可以得到下面结果:
combinations方法第1个参数是需要组合的数据,第2个参数是组合的个数。
将得到的是一个迭代器,这代码可以简化一下:
#coding:utf-8 import itertools print(map(lambda x:''.join(x), itertools.combinations('ABCD', 2)))
那如果要使用具体名字呢?这个也行,把字符串换成列表。如下:
#coding:utf-8 import itertools names = ['John', 'Tom', 'Alice', 'Ben'] print(map(lambda x:','.join(x), itertools.combinations(names, 2)))
组合就差不多这样。我们再看看排列的情况。
例如上面的情景,有一个项作业需要2名工作人员合作完成。该项作业需要2名工作人员分别负责控制两个设备。同1个人控制不同设备是属于不同的安排。
这里我们用permutations方法,该方法和combinations用法一样。
#coding:utf-8 import itertools names = ['John', 'Tom', 'Alice', 'Ben'] print(map(lambda x:','.join(x), itertools.permutations(names, 2)))
排列的结果明显要比组合得到的结果多。
itertools是一个实用的模块,里面还有很多方法没有提及。大家有兴趣可以自行了解。