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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5制作线路图,HTML5绘制上海地铁线路图

某市政项目用到地铁图展示&#xff0c;展示地铁站点以及相关信息流&#xff0c;使用Qunee组件可以很好的解决这类需求&#xff0c;做出优美的展现&#xff0c;下面以上海2012地铁图为例&#xff0c;效果如下&#xff1a;上海2012地铁图效果示例讲解首先需要解决数据问题&#x…

Cocos2d-x VS. OGEngine,联盟与部落的战争

在近期的全球移动开发者大会上&#xff0c;Unity发布了2D引擎&#xff0c;触控在同时发布了Cocos 3D引擎&#xff1b;而在差不多同时间&#xff0c;以安卓为主的OGEngine也发布了新版本&#xff0c;并宣布将支持跨平台。各大引擎频频大动作并不是巧合&#xff0c;这代表着移动游…

Android之获取设备的型号和手机厂商

1. 获取手机型号&#xff1a; String model android.os.Build.MODEL; 2. 获取手机厂商&#xff1a; String carrier android.os.Build.MANUFACTURER;

C#中的var理解

从 C# 3.0 开始&#xff0c;在方法范围内声明的变量可以具有隐式“类型”var。隐式类型本地变量为强类型&#xff0c;就像用户已经自行声明该类型&#xff0c;但编译器决定类型一样。i 的以下两个声明在功能上是等效的&#xff1a;var i 10; int i 10;var 关键字的常见用途是…

发布版本步骤

1&#xff0c;修改版本号 -eclipse中安卓工程的AndroidManifest.xml文件中修改 android:versionName"V1.0.1.170413.31"<日期-版本号1>2.获得软件APK &#xff0c;eclipse下windows-Android-build-取消勾选Atomatically refresh Force Skip packag…

Linux 2.6 完全公平调度算法CFS(Completely Fair Scheduler) 分析

转会http://www.ibm.com/developerworks/cn/linux/l-completely-fair-scheduler/index.html?cadrs-cn-0125 Linux 调度器简史 早期的 Linux 调度器使用了最低的设计&#xff0c;它显然不关注具有非常多处理器的大型架构&#xff0c;更不用说是超线程了。1.2 Linux 调度器使用了…

在计算机技术方面用英语怎么说,“计算机应用技术”用英语怎么说?

计算机应用技术 :1. Computer Applications Technology中国搜学网-学苑论坛 - 教育话题 - 学习交流 ... ...专利文献检索 The Searches of Patent Literature计算机应用技术 Computer Applications Technology精密电磁测量 Precise Electromagnetic Measurement ...2. Computer…

同页面多UpdatePanel的单独刷新

<!--UpdateMode"Conditional"设置为不共用的UpdatePanel--><asp:UpdatePanel runat"server" ID"up1" UpdateMode"Conditional"><ContentTemplate><asp:Button runat"server" ID"Button1" On…

linux之nautilus .命令浏览当前文件目录

1、比如我们在终端目前想打开这个路径下的文件目录&#xff0c;我们如果再去更加路径一个一个的打&#xff0c;就太浪费时间了&#xff0c;我们可以在终端这个路径下输入下面的命令就可以 ~/Desktop$ nautilus . 2、效果如下图

C# 异步与Windows应用程序

把 async 关键字用于 UWP 应用程序&#xff0c;需要注意&#xff0c;在 UI 线程中调用 await 之后&#xff0c;当异步方法返回时&#xff0c;将默认返回到 UI 线程中。这便于在异步方法完成后更新 UI 元素。注意为了创建 UWP 应用程序&#xff0c;需要 Windows 10&#xff0c;W…

重装系统后恢复oracle数据

2019独角兽企业重金招聘Python工程师标准>>> 由于前段时间重装了系统&#xff0c;今天重装了数据库oracle XE版本&#xff0c;用“移花接木”的手段将新装oracle的目录用原有目录直接给覆盖&#xff0c;于是顺利的启动了oracle服务&#xff0c;然后又打开plsql deve…

使用eclipse运行mapreduce程序

今天使用http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html上的方式搭建一个基于Eclipse的mapreduce开发环境&#xff0c;在运行WordCount例子时出现错误&#xff0c;经过检查后才发现&#xff0c;装了hadoop2.0插件的Eclipse在右击选择“run on hadoop”时不会…

java Split 用法

在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1、如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 2、如果用“|”作为分隔的话,必…

html三列布局源码,HTML三列布局 - 黄柳淞的个人页面 - OSCHINA - 中文开源技术交流社区...

1.三列布局1三列布局body{padding: 0;margin: 0;}.left{width:33.3%;height: 500px;background-color: #ccc;float: left;}.middle{width:33.3%;height: 500px;background-color: #bbb;float: left;}.right{width:33.3%;height: 500px;background-color: #aaa;float: left;}33.…

Android之如何用dextra.ELF64查看安卓手机“设置“图标的源代码

1、找到手机“设置”图标的包名 adb shell dumpsys activity top 得到包名: com.android.settings 2、拉下odex文件 1)、通过包名得到odex文件 adb shell pm list pakcage -f | grep com.android.settings 2)、得到结果 package:/system/priv-app/Settings/Settings.apk=co…

unity3d Json解析工具类

使用到的是Newtonsoft.Json动态库&#xff0c;下载地址&#xff1a;http://www.newtonsoft.com/json using Newtonsoft.Json; using System.Collections.Generic; using System.IO;/// <summary> /// Json帮助类 /// </summary> public class JsonHelper {/// <…

.NET6之MiniAPI(二十):实体验证FluentValidation

为了验证api post上来的数据的有效性&#xff0c;我们可以引入FluentValidation(详见https://fluentvalidation.net)。在asp.net mvc中&#xff0c;使用的是模型验证&#xff0c;通过在实体类上添加特性达到验证效果。FluentValidation的原理是通过实现AbstractValidator<T&…

nagios的搭建及配置----(中)

上篇文章写到了我们布置的nagios监控本机的状态&#xff0c;下面我们来看下nagios监控服务器状态的配置。至于为什么要这么配置&#xff0c;大家可以自行去百度下看看使用NRPE插件实现对remote server 进行监控&#xff0c;远程服务器配置1&#xff0c;编译安装nagios-plugin&a…

计算机整个文稿应用回顾主题,《计算机应用基础》精品课程电子教案-PowerPoint 2003...

一&#xff0e;回顾上次课内容(提问方式)对于幻灯片的切换、配色方案的使用、母版的使用用实例进行提问&#xff0c;通过学生的操作了解学生掌握的情况&#xff0c;并加强学生的实践操作能力。二、新课教学(讲解法、示范法)5.6.1幻灯片切换具体操作方法如下&#xff1a;在【幻灯…

linux之so文件、a文件、o文件的区别

1、o文件 o 就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件 .o 文件是源码编译出的二进制文件。 你先得了解从源代码到可执行文件的过程。以一个简单的add函数源文件为例。 int add(int a,int b) {return a+b; } 先预处理为.i文件gcc -E add.c -o add.i 再编译为…