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行,这叫组合,实现一种某一维度空间的切片.例如五 ...
最新文章
- Worker Service in ASP .NET Core
- 20220209-CTF MISC-BUUCTF-qr-被嗅探的流量(查找POST包)
- 反转!美光、英特尔等多家美企恢复对华为供货;首例云服务器存储侵权案改判,阿里云不担责;英国政府拟严格审查Libra……...
- ELK学习笔记之Kibana权限控制和集群监控
- php 开发商城 注意,开发PHP商城要注意的一些常见安全问题
- 谈demo、原型、产品的区别
- ajax上传图片 java_Java+ajax+图片上传
- 弹性地基梁板的计算理论_第八章 弹性地基梁的计算理论
- Separating Skills and Concepts for Novel Visual Question Answering 论文笔记
- MySQL的金科玉律:“不要使用SELECT *”
- Captain Flint and Crew Recruitment
- Matlab画六边形蜂窝网络点(任意个数)
- 利用for循环打印图形
- 无接触招聘,AI催生HCM SaaS新动向
- 没技术的人,看看这5个生意,虽然不起眼,很多人却在悄悄地赚钱
- Python入门习题大全——城市名
- Keras:Unet网络实现多类语义分割方式
- 大模型分布式训练技术
- C++ Release版软件 程序运行丢失MSVCR120D.dll的解决方法
- 网络温湿度测量控制系统
热门文章
- 学习笔记-------Seate解决分布式事务
- APP技巧:手机连接WiFi后,移动数据流量要不要关闭,看完你就懂了!
- 硬件知识:电脑硬盘的数据保护与恢复,新手必备的知识!
- 操作系统:分享10个经常用的cmd命令
- Net EF框架+ MySql示例
- ttl继承逻辑门的逻辑功能与参数测试 实验总结_LMS电声测试仪,LMS-V测试系统,精声电声...
- linux环境下Ncurses实现贪吃蛇游戏
- mysql 多字节编码漏洞_phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
- 小程序设计避免犯什么错_新设计师犯下的5种印刷错误以及如何避免
- 你需要的git命令大全来了