python实现求解列表中元素的排列和组合问题


Posted in Python onMarch 15, 2018

 求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了,今天花点时间写一下,之前都是手工写的,后来知道可以直接使用python的内置模块就可以完成这个工作了,今天就使用python的itertools模块来完成这个工作,一共解决四个问题:

1.生成排列,列表中元素不允许重复出现

2.生成排列,列表中元素可以重复出现

3.生成组合,不限元素个数,列表中元素不允许重复出现

4.生成组合,不限元素个数,列表中元素可以重复出现

    因为大家都有排列组合的知识这里就不累赘了,问题很简单,下面看具体的实现:

#!usr/bin/env python 
#encoding:utf-8 
''''' 
__Author__:沂水寒城 
功能:求解列表中元素的排列和组合问题 
''' 
from itertools import product 
from itertools import combinations 
import itertools 
def test_func1(num_list): 
 ''''' 
 生成排列 
 列表中元素不允许重复出现 
 排列数计算为:n!,其中n为num_list列表中元素个数 
 ''' 
 tmp_list = itertools.permutations(num_list) 
 res_list=[] 
 for one in tmp_list: 
  res_list.append(one) 
 print res_list 
 print '元素不允许重复出现排列总数为:', len(res_list) 
def test_func11(num_list): 
 ''''' 
 生成排列 
 列表中元素可以重复出现 
 排列总数计算为:(n*n*n...*n),一共n个n相乘 
 ''' 
 num=len(num_list) 
 res_list=list(product(num_list,repeat=num)) 
 print res_list 
 print '元素可以重复出现排列总数为:', len(res_list) 
def test_func2(num_list): 
 ''''' 
 生成组合,不限元素个数 
 列表中元素不允许重复出现 
 组合数计算为:2^n,其中n为num_list列表中元素个数 
 ''' 
 res_list=[] 
 for i in range(len(num_list)+1): 
  res_list+=list(combinations(num_list, i)) 
 print res_list 
 print '元素不允许重复出现组合总数为:', len(res_list) 
def test_func22(num_list): 
 ''''' 
 生成组合,不限元素个数 
 列表中元素可以重复出现 
 ''' 
 res_list=[] 
 num_list1=[str(i) for i in num_list] 
 for i in range(0,len(num_list)+1): 
  res_list+=[''.join(x) for x in itertools.product(*[num_list1] * i)] 
 print res_list 
 print '元素可以重复出现组合总数为:', len(res_list) 
if __name__ == '__main__': 
 num_list=[1,2,3,4] 
 test_func1(num_list) 
 print '-------------------------------------' 
 test_func11(num_list) 
 print '-------------------------------------' 
 test_func2(num_list) 
 print '-------------------------------------' 
 test_func22(num_list)

结果如下:

[(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2), (2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1), (3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1), (4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)] 
元素不允许重复出现排列总数为: 24 
------------------------------------- 
[(1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3), (1, 1, 1, 4), (1, 1, 2, 1), (1, 1, 2, 2), (1, 1, 2, 3), (1, 1, 2, 4), (1, 1, 3, 1), (1, 1, 3, 2), (1, 1, 3, 3), (1, 1, 3, 4), (1, 1, 4, 1), (1, 1, 4, 2), (1, 1, 4, 3), (1, 1, 4, 4), (1, 2, 1, 1), (1, 2, 1, 2), (1, 2, 1, 3), (1, 2, 1, 4), (1, 2, 2, 1), (1, 2, 2, 2), (1, 2, 2, 3), (1, 2, 2, 4), (1, 2, 3, 1), (1, 2, 3, 2), (1, 2, 3, 3), (1, 2, 3, 4), (1, 2, 4, 1), (1, 2, 4, 2), (1, 2, 4, 3), (1, 2, 4, 4), (1, 3, 1, 1), (1, 3, 1, 2), (1, 3, 1, 3), (1, 3, 1, 4), (1, 3, 2, 1), (1, 3, 2, 2), (1, 3, 2, 3), (1, 3, 2, 4), (1, 3, 3, 1), (1, 3, 3, 2), (1, 3, 3, 3), (1, 3, 3, 4), (1, 3, 4, 1), (1, 3, 4, 2), (1, 3, 4, 3), (1, 3, 4, 4), (1, 4, 1, 1), (1, 4, 1, 2), (1, 4, 1, 3), (1, 4, 1, 4), (1, 4, 2, 1), (1, 4, 2, 2), (1, 4, 2, 3), (1, 4, 2, 4), (1, 4, 3, 1), (1, 4, 3, 2), (1, 4, 3, 3), (1, 4, 3, 4), (1, 4, 4, 1), (1, 4, 4, 2), (1, 4, 4, 3), (1, 4, 4, 4), (2, 1, 1, 1), (2, 1, 1, 2), (2, 1, 1, 3), (2, 1, 1, 4), (2, 1, 2, 1), (2, 1, 2, 2), (2, 1, 2, 3), (2, 1, 2, 4), (2, 1, 3, 1), (2, 1, 3, 2), (2, 1, 3, 3), (2, 1, 3, 4), (2, 1, 4, 1), (2, 1, 4, 2), (2, 1, 4, 3), (2, 1, 4, 4), (2, 2, 1, 1), (2, 2, 1, 2), (2, 2, 1, 3), (2, 2, 1, 4), (2, 2, 2, 1), (2, 2, 2, 2), (2, 2, 2, 3), (2, 2, 2, 4), (2, 2, 3, 1), (2, 2, 3, 2), (2, 2, 3, 3), (2, 2, 3, 4), (2, 2, 4, 1), (2, 2, 4, 2), (2, 2, 4, 3), (2, 2, 4, 4), (2, 3, 1, 1), (2, 3, 1, 2), (2, 3, 1, 3), (2, 3, 1, 4), (2, 3, 2, 1), (2, 3, 2, 2), (2, 3, 2, 3), (2, 3, 2, 4), (2, 3, 3, 1), (2, 3, 3, 2), (2, 3, 3, 3), (2, 3, 3, 4), (2, 3, 4, 1), (2, 3, 4, 2), (2, 3, 4, 3), (2, 3, 4, 4), (2, 4, 1, 1), (2, 4, 1, 2), (2, 4, 1, 3), (2, 4, 1, 4), (2, 4, 2, 1), (2, 4, 2, 2), (2, 4, 2, 3), (2, 4, 2, 4), (2, 4, 3, 1), (2, 4, 3, 2), (2, 4, 3, 3), (2, 4, 3, 4), (2, 4, 4, 1), (2, 4, 4, 2), (2, 4, 4, 3), (2, 4, 4, 4), (3, 1, 1, 1), (3, 1, 1, 2), (3, 1, 1, 3), (3, 1, 1, 4), (3, 1, 2, 1), (3, 1, 2, 2), (3, 1, 2, 3), (3, 1, 2, 4), (3, 1, 3, 1), (3, 1, 3, 2), (3, 1, 3, 3), (3, 1, 3, 4), (3, 1, 4, 1), (3, 1, 4, 2), (3, 1, 4, 3), (3, 1, 4, 4), (3, 2, 1, 1), (3, 2, 1, 2), (3, 2, 1, 3), (3, 2, 1, 4), (3, 2, 2, 1), (3, 2, 2, 2), (3, 2, 2, 3), (3, 2, 2, 4), (3, 2, 3, 1), (3, 2, 3, 2), (3, 2, 3, 3), (3, 2, 3, 4), (3, 2, 4, 1), (3, 2, 4, 2), (3, 2, 4, 3), (3, 2, 4, 4), (3, 3, 1, 1), (3, 3, 1, 2), (3, 3, 1, 3), (3, 3, 1, 4), (3, 3, 2, 1), (3, 3, 2, 2), (3, 3, 2, 3), (3, 3, 2, 4), (3, 3, 3, 1), (3, 3, 3, 2), (3, 3, 3, 3), (3, 3, 3, 4), (3, 3, 4, 1), (3, 3, 4, 2), (3, 3, 4, 3), (3, 3, 4, 4), (3, 4, 1, 1), (3, 4, 1, 2), (3, 4, 1, 3), (3, 4, 1, 4), (3, 4, 2, 1), (3, 4, 2, 2), (3, 4, 2, 3), (3, 4, 2, 4), (3, 4, 3, 1), (3, 4, 3, 2), (3, 4, 3, 3), (3, 4, 3, 4), (3, 4, 4, 1), (3, 4, 4, 2), (3, 4, 4, 3), (3, 4, 4, 4), (4, 1, 1, 1), (4, 1, 1, 2), (4, 1, 1, 3), (4, 1, 1, 4), (4, 1, 2, 1), (4, 1, 2, 2), (4, 1, 2, 3), (4, 1, 2, 4), (4, 1, 3, 1), (4, 1, 3, 2), (4, 1, 3, 3), (4, 1, 3, 4), (4, 1, 4, 1), (4, 1, 4, 2), (4, 1, 4, 3), (4, 1, 4, 4), (4, 2, 1, 1), (4, 2, 1, 2), (4, 2, 1, 3), (4, 2, 1, 4), (4, 2, 2, 1), (4, 2, 2, 2), (4, 2, 2, 3), (4, 2, 2, 4), (4, 2, 3, 1), (4, 2, 3, 2), (4, 2, 3, 3), (4, 2, 3, 4), (4, 2, 4, 1), (4, 2, 4, 2), (4, 2, 4, 3), (4, 2, 4, 4), (4, 3, 1, 1), (4, 3, 1, 2), (4, 3, 1, 3), (4, 3, 1, 4), (4, 3, 2, 1), (4, 3, 2, 2), (4, 3, 2, 3), (4, 3, 2, 4), (4, 3, 3, 1), (4, 3, 3, 2), (4, 3, 3, 3), (4, 3, 3, 4), (4, 3, 4, 1), (4, 3, 4, 2), (4, 3, 4, 3), (4, 3, 4, 4), (4, 4, 1, 1), (4, 4, 1, 2), (4, 4, 1, 3), (4, 4, 1, 4), (4, 4, 2, 1), (4, 4, 2, 2), (4, 4, 2, 3), (4, 4, 2, 4), (4, 4, 3, 1), (4, 4, 3, 2), (4, 4, 3, 3), (4, 4, 3, 4), (4, 4, 4, 1), (4, 4, 4, 2), (4, 4, 4, 3), (4, 4, 4, 4)] 
元素可以重复出现排列总数为: 256 
------------------------------------- 
[(), (1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 3, 4)] 
元素不允许重复出现组合总数为: 16 
------------------------------------- 
['', '1', '2', '3', '4', '11', '12', '13', '14', '21', '22', '23', '24', '31', '32', '33', '34', '41', '42', '43', '44', '111', '112', '113', '114', '121', '122', '123', '124', '131', '132', '133', '134', '141', '142', '143', '144', '211', '212', '213', '214', '221', '222', '223', '224', '231', '232', '233', '234', '241', '242', '243', '244', '311', '312', '313', '314', '321', '322', '323', '324', '331', '332', '333', '334', '341', '342', '343', '344', '411', '412', '413', '414', '421', '422', '423', '424', '431', '432', '433', '434', '441', '442', '443', '444', '1111', '1112', '1113', '1114', '1121', '1122', '1123', '1124', '1131', '1132', '1133', '1134', '1141', '1142', '1143', '1144', '1211', '1212', '1213', '1214', '1221', '1222', '1223', '1224', '1231', '1232', '1233', '1234', '1241', '1242', '1243', '1244', '1311', '1312', '1313', '1314', '1321', '1322', '1323', '1324', '1331', '1332', '1333', '1334', '1341', '1342', '1343', '1344', '1411', '1412', '1413', '1414', '1421', '1422', '1423', '1424', '1431', '1432', '1433', '1434', '1441', '1442', '1443', '1444', '2111', '2112', '2113', '2114', '2121', '2122', '2123', '2124', '2131', '2132', '2133', '2134', '2141', '2142', '2143', '2144', '2211', '2212', '2213', '2214', '2221', '2222', '2223', '2224', '2231', '2232', '2233', '2234', '2241', '2242', '2243', '2244', '2311', '2312', '2313', '2314', '2321', '2322', '2323', '2324', '2331', '2332', '2333', '2334', '2341', '2342', '2343', '2344', '2411', '2412', '2413', '2414', '2421', '2422', '2423', '2424', '2431', '2432', '2433', '2434', '2441', '2442', '2443', '2444', '3111', '3112', '3113', '3114', '3121', '3122', '3123', '3124', '3131', '3132', '3133', '3134', '3141', '3142', '3143', '3144', '3211', '3212', '3213', '3214', '3221', '3222', '3223', '3224', '3231', '3232', '3233', '3234', '3241', '3242', '3243', '3244', '3311', '3312', '3313', '3314', '3321', '3322', '3323', '3324', '3331', '3332', '3333', '3334', '3341', '3342', '3343', '3344', '3411', '3412', '3413', '3414', '3421', '3422', '3423', '3424', '3431', '3432', '3433', '3434', '3441', '3442', '3443', '3444', '4111', '4112', '4113', '4114', '4121', '4122', '4123', '4124', '4131', '4132', '4133', '4134', '4141', '4142', '4143', '4144', '4211', '4212', '4213', '4214', '4221', '4222', '4223', '4224', '4231', '4232', '4233', '4234', '4241', '4242', '4243', '4244', '4311', '4312', '4313', '4314', '4321', '4322', '4323', '4324', '4331', '4332', '4333', '4334', '4341', '4342', '4343', '4344', '4411', '4412', '4413', '4414', '4421', '4422', '4423', '4424', '4431', '4432', '4433', '4434', '4441', '4442', '4443', '4444'] 
元素可以重复出现组合总数为: 341 
[Finished in 0.4s]

总结

以上所述是小编给大家介绍的python实现求解列表中元素的排列和组合问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
Python基于pandas爬取网页表格数据
May 11 Python
解决python3中os.popen()出错的问题
Nov 19 Python
python实现代码审查自动回复消息
Feb 01 Python
python如何为list实现find方法
May 30 Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 #Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 #Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 #Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 #Python
python实现word 2007文档转换为pdf文件
Mar 15 #Python
python中使用PIL制作并验证图片验证码
Mar 15 #Python
Python读取Word(.docx)正文信息的方法
Mar 15 #Python
You might like
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
PHP 实现重载
2021/03/09 PHP
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
Python底层封装实现方法详解
2020/01/22 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
联想中国官方商城:Lenovo China
2017/10/18 全球购物
一次性工伤赔偿协议书范本
2014/11/25 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
会议通知范文
2015/04/15 职场文书
单身证明格式样本
2015/06/15 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
利用Apache Common将java对象池化的问题
2022/06/16 Servers