python计算组合数_python排列组合算法

从N个里取C个的排列组合:

def combination(n,c,com=1,limit=0,per=[]):

for pos in range(limit,n):

t = per + [pos]

if len(set(t)) == len(t):

if len(t) == c:

yield [pos,]

else:

for result in combination(n,c,com,com*pos, per + [pos,]):

yield [pos,] + result

print("排列:")

for res in combination(3,3,0):

print(res)

print("组合:")

for res in combination(3,3):

print(res)

结果:

排列:

[0, 1, 2]

[0, 2, 1]

[1, 0, 2]

[1, 2, 0]

[2, 0, 1]

[2, 1, 0]

组合:

[0, 1, 2]

排列就是每次都从0开始选,组合的话,后一个必须大于前一个,combination第三个参数com表示是排列还是组合,因为函数名是combination,所以缺省是组合。

检查的话:无论排列还是组合,都不能重复,就是把列表变成词典,看看长度是否一样,不一样了就是有重复元素,不应该放到结果中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值