python 排列组合
来源:互联网 发布:java父类指向子类 编辑:程序博客网 时间:2024/05/29 09:58
python的一个特点就是其强大的扩展库,在做列表和一些其他字符操作时非常方便。
数学中最常见的一个计算问题是排列组合数的计算
1.计算排列组合数
当m和n比较小的时候,用手比较容易得到结果,比如C(4,2)=6,A(5,3)=60
但当数据比较大的时候,计算起来就不那么容易了,比如C(17,4)=2380
为此,可以采用下面的文件进行交互式的得到计算结果:
# --coding=utf-8--import operatorimport stringprint ("input n and k:")strn=raw_input("n:")strk=raw_input("k:")n=string.atoi(strn)k=string.atoi(strk)def c(n,k): return reduce(operator.mul, range(n - k + 1, n + 1)) /reduce(operator.mul, range(1, k +1)) def fac(n): return reduce(operator.mul, range(1,n+1)) def a(n,k): return reduce(operator.mul, range(n - k + 1, n + 1))if __name__ == '__main__': cc=c(n,k) aa=a(n,k) fa=fac(n) print ("c(n,k)= %s" %cc) print ("a(n,k)= %s" %aa) print ("fac(n,k)= %s" %fa)其中fac()函数是计算阶乘的函数,上述用到了python的reduce函数,解释如下:
python中的reduce内建函数是一个二元操作函数,用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:
用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
如:
def myadd(x,y): return x+y sum=reduce(myadd,(1,2,3,4,5,6,7)) print sum#结果就是输出1+2+3+4+5+6+7的结果即28
当然,也可以用lambda的方法,更为简单:
sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7)) print sum值得注意的是在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.
2.得到详细的排列组合结果
如果希望根据给出的详细数据,得到所有的可能排列组合,就需要使用python的itertools模块
详细如下:有序排列
import itertools print list(itertools.permutations([1,2,3,4],2))会得到[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
同样的,无序组合也可以:
import itertools print list(itertools.combinations([1,2,3,4],2))会得到:[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
参考文章:
http://www.tuicool.com/articles/vIRryi
http://blog.csdn.net/perfumekristy/article/details/8526336
http://blog.csdn.net/chjjunking/article/details/6859135
0 0
- python排列组合
- python 排列组合
- Python排列组合
- python,排列组合
- python 排列组合
- python 排列组合
- 【python】python排列组合
- python的排列组合
- Python.排列组合实现方法
- python 排列组合 解决实际问题
- 排列组合问题python
- Python的排列组合运用
- Python 排列组合的计算
- python-itertools排列组合模块
- 用python实现排列组合
- python 排列组合之itertools
- python-itertools排列组合模块
- Python排列组合之itertools
- Thymeleaf基本知识
- Android根据分辨率进行单位转换-(dp,sp转像素px) - topMan'blog - ITeye技术网站
- JMX在Tomcat中的应用
- setCompoundDrawables与setCompoundDrawablesWithIntrinsicBounds的区别
- 安装adventure和northwind示例数据库
- python 排列组合
- Hibernate 映射数据库中Json字段的解决方案
- GPIO模拟SPI接口代码
- iOS开发-------简单通讯录2(UISearchController)
- P2P中DHT网络介绍
- zabbix之通过jmx监控tomcat
- Android FrameWork浅识
- 自定义CoordinatorLayout的Behavior实现知乎和简书快速返回效果
- Centos7 安装kilo-7 Controller(neutron)