python 生成排列、组合以及选择
from <python cookbook> 19.15
任务
需要对一个序列的排列(permutation)、组合(combination)或选择(selection)进行迭代操作。即使初始的序列长度并不长,组合计算的规则却显示生成的序列可能非常庞大,比如一个长度为13的序列有超过60亿种可能的排列。所以,你肯定不希望在开始迭代前计算并生成序列中的所有项
解决方案
生成器允许你在迭代的时候一次一个的计算需要的对象。如果有很多这种对象,而且你也必须逐个的检查他们,那么程序无可避免的会用很长时间才能完成循环。但至少你不用浪费很多内存来保存所有项:
def _combinators(_handle, items, n):''' 抽取下列组合的通用结构'''if n == 0:yield [ ]for i, item in enumerate(items):this_one = [item]for cc in _combinators(_handle, _handle(items, i), n-1):yield this_one + ccdef combinations(items, n):''' 取得n个不同的项, 顺序是有意义的'''def skipIthItem(items, i):return items[:i] + items[i + 1:]return _combinators(skipIthItem, items, n)def uniqueCombinations(items, n):'''取得n个不同的项,顺序无关'''def afterIthItem(items, i):return items[i+1:]return _combinators(afterIthItem, items, n)def selections(items, n):'''取得n项(不一定要不同),顺序是有意义的'''def keepAllItems(items, i):return itemsreturn _combinators(keepAllItems, items, n)def permutations(items):''' 取得所有项, 顺序是有意义的'''return combinations(items, len(items))if __name__ == '__main__':print "Permutations of 'bar'"print map(''.join, permutations('bar')) #输出: ['bar', 'bra', 'abr', 'arb', 'rba', 'rab']print "Combinations of 2 letters from 'bar'"print map(''.join, combinations('bar', 2)) # 输出: ['ba', 'br', 'ab', 'ar', 'rb', 'ra']print "Unique Combinations of 2 letters from 'bar'"print map(''.join, uniqueCombinations('bar', 2)) # 输出: ['ba', 'br', 'ar']print "Selections of 2 letters from 'bar'"print [''.join, selections('bar', 2)] # 输出: ['bb', 'ba', 'br', 'ab', 'aa', 'ar', 'rb', 'ra', 'rr']
转载于:https://www.cnblogs.com/siriuswang/p/4638816.html
python 生成排列、组合以及选择相关推荐
- python生成排列组合_Python 排列组合生成
zckun:老哥们, 请教一个问题, 是关于排列组合的, 前几天和老哥们讨论了一下, 能是能解决, 但感觉不太方便 看一个简单的例子应该就明白了. to 目前是我这样做的, 用了一个模版 templa ...
- python编写排列组合,密码生产功能
python编写排列组合 python在编写排列组合是会用到 itertools 模块 排列 import itertools mylist = list(itertools.permutation ...
- python字符串排列组合子集_python编程题:字符串的(所有可能的)排列组合
前言 在此研究: 1)给定一个字符串,如何对其中字母进行排列组合: 2)进一步了解Python递归. 题目内容 在指定位置编写代码,完成函数,根据给定的字符串,给出组成该字符串的字符的所有排列构成的字 ...
- python排序函数set_【Python】排列组合itertools 集合set
■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...
- python写排列组合_Python实现的简单排列组合算法示例
本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...
- Python实现排列组合C(n,m) 和 A(n,m)
1. 从(0,1,2,3,4,5)5个数中随机选择2个数,有多少种选法? 这里用到了scipy库中的两个模块permutation 和 combination (1)选择分先后顺序,即 A 5 2 A ...
- python数字排列组合去重_排列组合-生成集合的所有子集
//一个有N个不重复元素的集合的某个子集,可以用这个N个元素中每个元素在或是不在这个子集中来表示. //把这N个元素一字排开,每个位置可以用1来标识对应位置的元素在子集中,用0来标识这个元素不在子集中 ...
- python 彩票排列组合_对福彩3D号码进行排列组合为例学习Python的itertools模块的用法...
这里我们以对福彩3D号码进行排列组合为例学习Python的itertools模块的用法.首先我们选择心仪的号码.比如我们选择4,5,7,8 第一种我们只要组六的组合.代码如下 import itert ...
- Python 基础——排列组合的实现
考虑这样一个问题,给定一个矩阵(多维数组,numpy.ndarray()),如何shuffle这个矩阵(也就是对其行进行全排列),如何随机地选择其中的k行,这叫组合,实现一种某一维度空间的切片.例如五 ...
最新文章
- js innerHTML 改变div内容的方法
- Apache SparkStreaming 简介和编程模型
- Py中的类型注解【转载】
- java多线程有几种实现方法_Java多线程之间实现通讯
- 联合使用 HTML 5、地理定位 API
- java 死锁_java死锁分析
- 【人生】不管你挣多少, 钱永远是问题
- 桥牌笔记:挤牌的条件之一,调整赢墩到只差一墩
- 查看微信小程序网页源代码
- C语言之printf输出各种格式
- 自学白帽黑客第一年总结
- 用python根据年份判断生肖_C#中根据年份判断十二生肖
- Excise_Oop1
- 小学生学计算机步骤,小学生计算机入门“五步走”
- python 原理 pdf_利用Python处理PDF——裁剪和生成新的PDF
- 『Reprint』GRADUAL
- linux 基础常用命令集
- 说说arcgis的*.cpg文件
- 南开计算机考研真题,2018年南开大学考研真题硕士研究生入学考试试题
- 用EasyGBD做国标GB28181协议级联
热门文章
- 计算机系统组成图表,Excel2013中的图表作用组成类型与认识(上)——想象力电脑应用...
- 网络知识:秒懂你家的网络连接方式
- Shell中I/O重定向的用法笔记
- 嵌入式C语言基础(一)
- 单选按钮步骤流程向导 js_创建令人愉快的按钮的6个步骤
- 7个月,4000+人,500+源码笔记,诚邀你参加源码共读~
- Vue团队核心成员开发的39行小工具 install-pkg 安装包,值得一学!
- Python进阶:如何将字符串常量转化为变量?
- Spring校验@RequestParams和@PathVariables参数
- linux java环境变量设置