Python轻松实现排列和组合

  • 发布时间:2016年12月26日 10:07
  • 作者:杨仕航
  • 分类标签: Python
  • 阅读(25304)
  • 评论(0)

什么是排列和组合我就不介绍了,这个简单。不知道的看这篇文章也看不下去。

若自己来实现排列和组合比较麻烦,需要考虑各种条件判断情况等等。

其实在Python中可以用itertools模块轻松实现,这也是Python的魅力之一。

看看我翻译的漫画:

20161226/20161226105432797.jpg


好了,回归正题。

假如,有一个项作业需要2名工作人员合作完成。当天值班共4人,求这4个人两两组合的所有情况。

用ABCD分别代表这4个工作人员。不用想其他方法处理,看看itertools怎么实现。

#coding:utf-8
import itertools

#使用permutations方法
ls = itertools.combinations('ABCD', 2)

#遍历所有组合情况
for l in ls:
    print(l)

可以得到下面结果:

20161226/20161226095813735.png

combinations方法第1个参数是需要组合的数据,第2个参数是组合的个数。

将得到的是一个迭代器,这代码可以简化一下:

#coding:utf-8
import itertools

print(map(lambda x:''.join(x), itertools.combinations('ABCD', 2)))

20161226/20161226100012231.png

那如果要使用具体名字呢?这个也行,把字符串换成列表。如下:

#coding:utf-8
import itertools

names = ['John', 'Tom', 'Alice', 'Ben']
print(map(lambda x:','.join(x), itertools.combinations(names, 2)))

20161226/20161226100138363.png


组合就差不多这样。我们再看看排列的情况。

例如上面的情景,有一个项作业需要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)))

20161226/20161226095432904.png

排列的结果明显要比组合得到的结果多。

itertools是一个实用的模块,里面还有很多方法没有提及。大家有兴趣可以自行了解。

上一篇:VSTO中Excel数字和列名相互转换

下一篇:Python的json模块基本用法

评论列表

智慧如你,不想发表一下意见吗?

新的评论

清空