博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 生成排列、组合以及选择
阅读量:5320 次
发布时间:2019-06-14

本文共 1722 字,大约阅读时间需要 5 分钟。

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

 

转载于:https://www.cnblogs.com/siriuswang/p/4638816.html

你可能感兴趣的文章
疫情控制
查看>>
YUI3自动加载树实现
查看>>
String类中的toUpperCase()和toLowerCase()方法
查看>>
python知识思维导图
查看>>
IIS建网站以及建FTP
查看>>
当心JavaScript奇葩的逗号表达式
查看>>
@修饰符--python中的装饰器
查看>>
新工具
查看>>
如何学习-维果茨基
查看>>
App Store最新审核指南(2015年3月更新版)
查看>>
织梦MIP文章内容页图片适配百度MIP规范
查看>>
学习AS3菜鸟起飞吧之—函数(二):函数之返回语句
查看>>
sap basis 常用事务码 --转
查看>>
迭代器
查看>>
传入值参数&传入引用参数的区别
查看>>
第13课 - 自动生成依赖关系(下)
查看>>
POJ No.2386【B007】
查看>>
点击复制插件clipboard.js
查看>>
LeetCode : Pascal's Triangle
查看>>
mysql优化
查看>>