重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在日常的工作学习中,我们肯定会遇到排列组合问题,比如,在5种颜色的球中,任意取3个,共有多少种组合方式,这也包括有放回和无放回抽样。
站在用户的角度思考问题,与客户深入沟通,找到广南网站设计与广南网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、成都网站设计、企业官网、英文网站、手机端网站、网站推广、申请域名、雅安服务器托管、企业邮箱。业务覆盖广南地区。
在python中,自带的排列组合函数,都在python的指导工具包itertools中。
product 笛卡尔积(有放回抽样排列)
permutations 排列(不放回抽样排列)
combinations 组合,没有重复(不放回抽样组合)
combinations_with_replacement 组合,有重复(有放回抽样组合)
python3中返回的为对象,可以通过迭代读取将值输出。
end
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?具体有哪些数字
方法一:for循环+集合去重复项
方法二:内置函数itertools
排列组合迭代器:
itertools.product p,q…[repeat=l]笛卡尔积,相当于嵌套的for
itertools.permutation p[,r]长度为r元组,所有可能得排列,无重复元素
itertools.combination p,r 长度r元组,有序,无重复元素
itertools.combinaton_with_replacement p,r 长度人员组,有序,元素可重复
举例
模块其他函数:
以上四种情况均为最常见的排列组合,从有无顺序和是否重复两个维度进行思考,建议理解并背诵。
在使用python计算排列组合之前,需要计算阶乘,可以有两种方式,一是使用math库中的factorial函数,二是使用如下的递归函数。
按照排列的公式:
按照组合的公式:
3.1 生日问题
假设一个班级中共有n个人,一年有365天,其中每天作为生日的概率是相等的,那么其中至少有两个人的生日在同一天的概率是多少?
此题属于全排列问题,需要反向思考,写出公式之后直接输入到python中计算
3.2 大乐透问题
大乐透的玩法是这样的,从35个红球中选择5个,从12个红球中选择2个,如果全中,那就中一等奖。那么请问,中一等奖的概率是多少?
此题属于组合问题,中奖的可能性为一种,因此分子为1,分母为所有的组合情况。