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 生成排列、组合以及选择相关推荐

  1. python生成排列组合_Python 排列组合生成

    zckun:老哥们, 请教一个问题, 是关于排列组合的, 前几天和老哥们讨论了一下, 能是能解决, 但感觉不太方便 看一个简单的例子应该就明白了. to 目前是我这样做的, 用了一个模版 templa ...

  2. python编写排列组合,密码生产功能

    python编写排列组合 python在编写排列组合是会用到  itertools 模块 排列 import itertools mylist = list(itertools.permutation ...

  3. python字符串排列组合子集_python编程题:字符串的(所有可能的)排列组合

    前言 在此研究: 1)给定一个字符串,如何对其中字母进行排列组合: 2)进一步了解Python递归. 题目内容 在指定位置编写代码,完成函数,根据给定的字符串,给出组成该字符串的字符的所有排列构成的字 ...

  4. python排序函数set_【Python】排列组合itertools 集合set

    ■itertools 利用python的itertools可以轻松地进行排列组合运算 itertools的方法基本上都返回迭代器 比如 •itertools.combinations('abcd',2 ...

  5. python写排列组合_Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用 ...

  6. Python实现排列组合C(n,m) 和 A(n,m)

    1. 从(0,1,2,3,4,5)5个数中随机选择2个数,有多少种选法? 这里用到了scipy库中的两个模块permutation 和 combination (1)选择分先后顺序,即 A 5 2 A ...

  7. python数字排列组合去重_排列组合-生成集合的所有子集

    //一个有N个不重复元素的集合的某个子集,可以用这个N个元素中每个元素在或是不在这个子集中来表示. //把这N个元素一字排开,每个位置可以用1来标识对应位置的元素在子集中,用0来标识这个元素不在子集中 ...

  8. python 彩票排列组合_对福彩3D号码进行排列组合为例学习Python的itertools模块的用法...

    这里我们以对福彩3D号码进行排列组合为例学习Python的itertools模块的用法.首先我们选择心仪的号码.比如我们选择4,5,7,8 第一种我们只要组六的组合.代码如下 import itert ...

  9. Python 基础——排列组合的实现

    考虑这样一个问题,给定一个矩阵(多维数组,numpy.ndarray()),如何shuffle这个矩阵(也就是对其行进行全排列),如何随机地选择其中的k行,这叫组合,实现一种某一维度空间的切片.例如五 ...

最新文章

  1. js innerHTML 改变div内容的方法
  2. Apache SparkStreaming 简介和编程模型
  3. Py中的类型注解【转载】
  4. java多线程有几种实现方法_Java多线程之间实现通讯
  5. 联合使用 HTML 5、地理定位 API
  6. java 死锁_java死锁分析
  7. 【人生】不管你挣多少, 钱永远是问题
  8. 桥牌笔记:挤牌的条件之一,调整赢墩到只差一墩
  9. 查看微信小程序网页源代码
  10. C语言之printf输出各种格式
  11. 自学白帽黑客第一年总结
  12. 用python根据年份判断生肖_C#中根据年份判断十二生肖
  13. Excise_Oop1
  14. 小学生学计算机步骤,小学生计算机入门“五步走”
  15. python 原理 pdf_利用Python处理PDF——裁剪和生成新的PDF
  16. 『Reprint』GRADUAL
  17. linux 基础常用命令集
  18. 说说arcgis的*.cpg文件
  19. 南开计算机考研真题,2018年南开大学考研真题硕士研究生入学考试试题
  20. 用EasyGBD做国标GB28181协议级联

热门文章

  1. 计算机系统组成图表,Excel2013中的图表作用组成类型与认识(上)——想象力电脑应用...
  2. 网络知识:秒懂你家的网络连接方式
  3. Shell中I/O重定向的用法笔记
  4. 嵌入式C语言基础(一)
  5. 单选按钮步骤流程向导 js_创建令人愉快的按钮的6个步骤
  6. 7个月,4000+人,500+源码笔记,诚邀你参加源码共读~
  7. Vue团队核心成员开发的39行小工具 install-pkg 安装包,值得一学!
  8. Python进阶:如何将字符串常量转化为变量?
  9. Spring校验@RequestParams和@PathVariables参数
  10. linux java环境变量设置