python combination_python 生成排列、组合以及选择

from 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 + cc

def 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 items

return _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']

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

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

【Python】排列组合itertools & 集合set

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

python 实现排列组合

1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...

python 编写排列组合

python在编写排列组合是会用到  itertools 模块 排列 import itertools mylist = list(itertools.permutations([)) # 全排列 p ...

Python实现排列组合

# -*- coding: utf-8 -*-"""Created on Sat Jun 30 11:49:56 2018 @author: zhen"&quo ...

python算法-排列组合

排列组合 一.递归 1.自己调用自己 2.找到一个退出的条件 二.全排列:针对给定的一组数据,给出包含所有数据的排列的组合 1:1 1,2:[[1,2],[2,1]] 1,2,3:[[1,2,3],[ ...

python之排列组合测试

# test permutations and combinations import itertools as it for i in it.combinations('abcd',2): prin ...

python解决排列组合

笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', re ...

poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )

ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6229   Accepted: 3737 Descript ...

随机推荐

转载:bootstrap, boosting, bagging 几种方法的联系

转:http://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, ja ...

angularjs中$http、$location、$watch及双向数据绑定学习实现简单登陆验证

使用$http.$location.$watch及双向数据绑定等实现简单的用户登陆验证,记录备忘: 1.$http模拟从后台获取json格式的数据: 2.$watch实时监控数据变化: 3.$loca ...

iOS 数字字符串的直接运算 + - * /

NSDecimalNumber *d1 = [NSDecimalNumber decimalNumberWithString:@"3.14"]; NSDecimalNumber * ...

在C#中使用GDAL创建Shape文件

这几天在项目中考虑使用GDAL,由于10年没有用过VC了,就在网上搜了下怎么样在C# 中使用GDAL,看到了http://blog.csdn.net/liminlu0314/article/detai ...

dd命令测试linux磁盘读写速度

1.先熟悉两个特殊的设备:    (1)/dev/null:回收站.无底洞.    (2)/dev/zero:产生字符. 2.测试磁盘写能力    time dd if=/dev/zero of=/t ...

Pie(二分)

ime Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8930   Accepted: 3235   Special Judge De ...

struts的ognl.NoConversionPossible错误

JSP页面便利集合的时候,代码如下

JDK源码之LinkedHashSet

LinkedHashSet是HashSet和LinkList结合产生的集合,集合中的元素互不相同,且元素采用双向链表进行连接. 1.定义 LinkedHashSet继承了HashSet并且实现了Set ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值