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. Worker Service in ASP .NET Core
  2. 20220209-CTF MISC-BUUCTF-qr-被嗅探的流量(查找POST包)
  3. 反转!美光、英特尔等多家美企恢复对华为供货;首例云服务器存储侵权案改判,阿里云不担责;英国政府拟严格审查Libra……...
  4. ELK学习笔记之Kibana权限控制和集群监控
  5. php 开发商城 注意,开发PHP商城要注意的一些常见安全问题
  6. 谈demo、原型、产品的区别
  7. ajax上传图片 java_Java+ajax+图片上传
  8. 弹性地基梁板的计算理论_第八章 弹性地基梁的计算理论
  9. Separating Skills and Concepts for Novel Visual Question Answering 论文笔记
  10. MySQL的金科玉律:“不要使用SELECT *”
  11. Captain Flint and Crew Recruitment
  12. Matlab画六边形蜂窝网络点(任意个数)
  13. 利用for循环打印图形
  14. 无接触招聘,AI催生HCM SaaS新动向
  15. 没技术的人,看看这5个生意,虽然不起眼,很多人却在悄悄地赚钱
  16. Python入门习题大全——城市名
  17. Keras:Unet网络实现多类语义分割方式
  18. 大模型分布式训练技术
  19. C++ Release版软件 程序运行丢失MSVCR120D.dll的解决方法
  20. 网络温湿度测量控制系统

热门文章

  1. 学习笔记-------Seate解决分布式事务
  2. APP技巧:手机连接WiFi后,移动数据流量要不要关闭,看完你就懂了!
  3. 硬件知识:电脑硬盘的数据保护与恢复,新手必备的知识!
  4. 操作系统:分享10个经常用的cmd命令
  5. Net EF框架+ MySql示例
  6. ttl继承逻辑门的逻辑功能与参数测试 实验总结_LMS电声测试仪,LMS-V测试系统,精声电声...
  7. linux环境下Ncurses实现贪吃蛇游戏
  8. mysql 多字节编码漏洞_phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
  9. 小程序设计避免犯什么错_新设计师犯下的5种印刷错误以及如何避免
  10. 你需要的git命令大全来了