排列组合公式及使用python实现

目录

排列组合公式

对n个各不相同的元素进行全排列

对n个元素进行全排列,其中有重复元素

代码实现排列


排列组合公式

有顺序的从n个不同元素取出m个

无顺序的从n个不同元素取出m个

对n个各不相同的元素进行全排列

一共有n!种情况

例如(1,2,3)有3!=6种,分别是123、132、231、213、312、321

对n个元素进行全排列,其中有重复元素

假设该元素重复m次,则一共有n! / m! 种情况

例如(1,1,1,2,3)有5个元素,所以分母是5!,有一个重复元素,且重复3次,所以分子是3!

所以有5! / 3! = 20种情况

有多个重复元素例如(1,1,2,2,3),有5个元素,所以分母是5!,有两个重复元素,分别重复2次,所以分母是2!*2!

所以有5! / (2!*2!) = 30种情况

再例如(1,1,2,2,2,3)有6个元素,所以分母是6!,有两个重复元素,分别重复2次和3次,所以分母是2!*3!

所以有6! / (2!*3!) = 60种情况

代码实现排列

使用itertools模块中的permutation()函数,permutation()函数接收一个可迭代对象如列表,然后会返回所有的可能排列情况

import itertools  # 导入模块

for i in itertools.permutations([1, 2, 3]):
    print(i)

结果

permutation()函数不会检测重复的元素

import itertools  # 导入模块

for i in itertools.permutations([1, 1, 2]):
    print(i)

结果

可以看到有很多重复的排列,因为permutation()函数认为两个1是不同的

可以使用集合进行去重

import itertools

r = set()  # 创建集合
for i in itertools.permutations([1, 1, 1, 2, 3]):
    r.add(i)  # add将i添加到集合,重复的元素不会添加
print(r)
print(len(r))  # 排列的个数

结果为20,跟上面使用的公式计算结果相同

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Genius256

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值