zoukankan      html  css  js  c++  java
  • python一中实现组合的方式

    方式1:
    #!/usr/bin/env python
    #-*- encoding: utf-8 -*-

    def permutations(iterable, r=None):
        # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
        # permutations(range(3)) --> 012 021 102 120 201 210
        pool = tuple(iterable)
        n = len(pool)
        r = n if r is None else r
        if r > n:
            return
        indices = range(n)
        cycles = range(n, n-r, -1)
        yield tuple(pool[i] for i in indices[:r])
        while n:
            for i in reversed(range(r)):
                cycles[i] -= 1
                if cycles[i] == 0:
                    indices[i:] = indices[i+1:] + indices[i:i+1]
                    cycles[i] = n - i
                else:
                    j = cycles[i]
                    indices[i], indices[-j] = indices[-j], indices[i]
                    print indices
                    yield tuple(pool[i] for i in indices[:r])
                    break
            else:
                return

    for x in  permutations(xrange(1,6),3):
        print x

    方式2:

    #/usr/bin/env python
    # -*-encoding:utf-8 -*-
    http://blog.csdn.net/wklken/article/details/8453107
    from time import time
    #生成全排列
    def perm(items, n=None):
        lg=len(items)
        r=n if n is not None else lg
        for i in xrange(lg):
            v = items[i:i + 1]
            if r == 1:
                yield v
            else:
                rest = items[:i] + items[i + 1:]
                for p in perm(rest, r - 1):
                    yield v + p
    #生成组合         
    def comb(items, n=None):
        if n is None:
            n = len(items)    
        for i in xrange(len(items)):
            v = items[i:i + 1]
            if n == 1:
                yield v
            else:
                rest = items[i + 1:]
                for c in comb(rest, n - 1):
                    yield v + c
                    
    if __name__=='__main__':
        t=time()
        for i in perm(range(1,20),3):
            print i
        print 'use time:',time()-t

    #!/usr/bin/env python
    # -*- encoding:utf-8 -*-

    from time import time
    def permutations(lst,n=None):
        num=len(lst)
        if num<n:
            print 'n is more than the length of list'
            return
        else:
            r= num if n is None else n       
        tmp=range(num)#用tmp值的下标对应mytup的值   
        cyc=range(num,num-r,-1)#用于循环,保证选出次数 
        yield [lst[i] for i in tmp[:r]]    
        while 1:
            for i in reversed(range(r)):
                cyc[i]-=1
                if cyc[i]==0:
                    tmp[i:]=tmp[i+1:]+tmp[i:i+1]
                    cyc[i] =num - i
                else:
                    j=cyc[i]
                    tmp[i],tmp[-j]=tmp[-j],tmp[i]
                    yield [lst[i] for i in tmp[:r]]
                    break
            else:
                return
    if __name__=='__main__':
        t=time()        
        for x in permutations(xrange(1,20),3):
            print x
        print "total run time:",time()-t

  • 相关阅读:
    ride关键字
    怎么分析《软件需求文档》
    linux系统在线搭建禅道
    用fiddler不能抓取https及证书无法导出
    mybatis There is no getter for property named 'xx' in 'class java.lang.String
    GMT与UTC
    cron表达式详解
    hdu 2083 简易版之最短距离
    hdu 2070 Fibbonacci Number
    hdu 2076 夹角有多大(题目已修改,注意读题)
  • 原文地址:https://www.cnblogs.com/holens/p/3907956.html
Copyright © 2011-2022 走看看