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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
Nov 06 Python
Python中安装easy_install的方法
Nov 18 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
python 多个参数不为空校验方法
Feb 14 Python
pyqt5实现登录界面的模板
May 30 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
基于python实现删除指定文件类型
Jul 21 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中使用gettext来支持多语言的方法
2011/05/02 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
键盘KeyCode值列表汇总
2013/11/26 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python实现基于HTTP文件传输实例
2014/11/08 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
Python self用法详解
2020/11/28 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
英国日常交易网站:Wowcher
2018/09/04 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
2014年计算机专业个人自我评价
2014/01/19 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
解除同居协议书
2015/01/29 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript