Python 有序排列permutations,无序组合combinations,阶乘factorial函数

news/2024/9/22 13:39:59

写这篇博客源于博友的提问:将介绍使用Python 进行 有序排列,无序组合排列,阶乘的函数。

1. 问题及解决

问题:
40个球,四个盒子,一个盒子十个球搞排列组合,每个球和盒子都是不可分辨的(没有贴标签或者怎么样),去得到有多少种解法

解决:
不区分球,不区分盒子;相当于是C40,10 * C30,10 * C20,10 * C10,10 * C4,4

用到了有序排列permutations、无序组合combinations、阶乘factorial,幸运的是python封装好了方法。

2. 效果图

在这里插入图片描述

1. 源码

from itertools import combinations, permutationsfrom math import factorial# permutations 有序排列
# combinations 无序排列
# factorial 阶乘
print(len(list(permutations([1, 2, 3, 4], 3))), list(permutations([1, 2, 3, 4], 3)))  # 有序排列
print(len(list(combinations([1, 2, 3, 4], 3))), list(combinations([1, 2, 3, 4], 3)))  # 无序排列# 40个球,四个盒子,一个盒子十个球搞排列组合,每个球和盒子都是不可分辨的(没有贴标签或者怎么样),去得到有多少种解法
ball_list = [i for i in range(1, 41)]  # 1~40
box_list = [i for i in range(1, 5)]  # 1~4# 不区分球,不区分盒子;
# 相当于是C40,10 * C30,10 * C20,10 *  C10,10 * C4,4
print('共%d种组合' % (factorial(40) / (pow(factorial(10), 4)) * len(list(combinations(box_list, 4)))))# 每一种放置球的组合方法,下边程序运行电脑会卡,谨慎运行
count = 0
for ball_1 in combinations(ball_list, 10):# 第一组球 ball_1# 剩下的球ball_list_last2 = list(set(ball_list).difference(set(ball_1)))for ball_2 in combinations(ball_list_last2, 10):# 第2组球 ball_2# 剩下的球ball_list_last3 = list(set(ball_list_last2).difference(set(ball_2)))for ball_3 in combinations(ball_list_last3, 10):# 第3组球 ball_3# 剩下的球ball_4 = list(set(ball_list_last3).difference(set(ball_3)))# 第4组球剩10个取10个,只有1种方法不用去排了count = count + 1print('第%d种组合 %s,%s,%s,%s' % (count, str(ball_1), str(ball_2), str(ball_3), str(ball_4)))
print('共%d种方法' % count)

参考

  • https://ask.csdn.net/questions/7844444/53996810

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

中国挪动批改KPI查核制度将器重客户满意度

飞象网讯(魏德龄/文)记者从相关动静处置解到,中国挪动2011年的KPI查核将大幅缩减,并消除数据业务、TD用户数和集体客户等目标,重点调高了利润和客户满意度目标,并加入了相关EVA财务目标查核。去年&#xff…

一起学WP7 XNA游戏开发(八. 让3d model动起来)

如何让3d model动起来,其实就是要给model的bone设置动作,这样整个model就会动起来了。一.获取Bones在fbx文件中可以看到所有bones的名称,这样就可以通过名称来获取到bones。turretBone tankModel.Bones["turret_geo"];…

cv2.threshold() 阈值:使用Python,OpenCV进行简单的图像分割

图像分割有多种形式。 聚类、压缩、边缘检测、区域增长、图分区、分水岭等等;(Clustering. Compression. Edge detection. Region-growing. Graph partitioning. Watershed. The list goes on.) 但是最开始只有最基本的一种:就是…

文件读写操作

如图&#xff0c;点击选择文件则读取文件路径&#xff0c;读取时将文件内容显示到文本框中&#xff0c;写入时将文本框内容写入文件 View Code namespace 文件操作{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }/// <summary>/// 选…

Python OpenCV分水岭算法分割和提取重叠或有衔接的图像中的对象

本文将介绍如何使用分水岭算法对触摸和重叠的图像中的对象进行分割和提取。 参考&#xff1a;https://www.pyimagesearch.com/2015/11/02/watershed-opencv/ 分水岭算法是一种分割的经典算法&#xff0c;在提取图像中连接或重叠的图像中的对象&#xff08;例如上图中的硬币&…

ubuntu18.04上安装TensorFlow2.0

推特上几乎每天都有关于深度学习中Keras、TensorFlow哪个个才是最好的框架的口水战。2019年后&#xff0c;这将不在是个问题。 2019年初&#xff0c;tf.keras 子模块已引入TensorFlow v1.10.0中。 现在&#xff0c;在TensorFlow 2.0中&#xff0c;Keras是TensorFlow的官方高级A…

docker 镜像容器导入导出、查看日志、拷贝文件命令

1. 本地文件拷贝到docker 容器中&#xff0c;参考 docker cp /root/pcl-pcl-1.8.1.tar.gz 7ff95b333e12:/docker cp /root/lib64_a 7ff95b333e12:/2. docker从容器里面拷文件到宿主机 docker cp 容器名&#xff1a;要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 d…

h5 video视频播放的同时加水印,图片加水印同样的原理

经常能看到播放视频的网站上加水印的效果,记录下成果以备后续看: 效果图如下: h5页面视频播放的同时加水印,有以下3种方法可尝试: 在原视频上添加,由于每次登陆的用户不一样,需要根据用户名动态确定水印的文本值。这并不现实;捕捉视频的每一帧,重新画在画布上,并添…