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

时间: 2024-10-18 10:47:07

python一中实现组合的方式的相关文章

Python进阶-----类组合的方式完成授权

授权:授权是包装的一个特性, 包装一个类型通常是对已存在的类型的一些定制,这种做法可以新建,修改或删除原有产品的功能.其它的则保持原样.授权的过程,即是所有更新的功能都是由新类的某部分来处理,但已存在的功能就授权给对象的默认属性. import time class FileHandle: def __init__(self,filename,mode = 'r',encoding = 'utf-8'): self.file = open(filename,mode,encoding=encod

day2-操作系统,编程语言分类,执行Python程序的两种方式,变量,python的内存管理,

1    什么是操作系统 操作系统位于计算机与应用软件之间,是一个协调,管理,控制计算机硬件资源与软件资源的控制程序 2     为何要有操作系统? 1,控制硬件. 2,把对硬件的复杂的操作封装成优美简单的接口,给用户或者应用程序去使用 注意:一套完整的计算机系统包含三部分 应用程序:比如QQ,暴风影音 操作系统:比如windows linux unix 计算机硬件 强调:我们以后开发的都是应用程序,应用程序无法直接操作硬件,但凡要操作硬件,都是调用操作系统的接口 3 编程语言的分类 1,机器语

python 继承与组合

一.组合 #老师 课程 生日 class Course: def __init__(self,name,period,price): self.name = name self.period = period self.price = price class Birth: def __init__(self,year,month,day): self.year = year self.month = month self.day = day class Teacher: def __init__

Python脚本获取参数的方式

在运维过程中,常常需要自己写脚本,而python往往是最佳的选择.那么怎么获取python脚本的命令行参数呢,例如: python demo.py a b c 怎么获取命令行参数,a,b,c 呢?可以通过sys库里面的argv来实现, 例如: $ cat demo.py #-*- coding: UTF-8 -*- import os import sys def demo(): print sys.argv print len(sys.argv) for i in range(len(sys.

python基础:python扩展包的安装方式

python扩展包有三种安装方式: 1. pip安装方式.python3默认自带pip,无需另外安装:在python2.7版本上默认为easy_install安装工作进行安装,如果需要使用pip安装,需要自行下载安装(可以从http://www.pip-installer.org网站下载). 2. 系统自带的包安装管理工具. 3. 从源代码安装. 使用pip安装:在command命令行中输入:pip install 包名,例如:pip install flask 使用pip安装指定版本:在com

python中执行cmd的方式

目前我使用到的python中执行cmd的方式有三种: 1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的时候程序会打出cmd在Linux上执行的信息.使用前需要import os. [python] view plain copy print? os.system("ls") 2. 使用Popen模块产生新的process 现在大部分人都喜欢使用Popen.Popen方法不会打印出cmd在linux上执行的信息.的确,Popen非常强大,

组合的方式完成授权

1.包装是在之前原有的方法的基础上,在做一点改动,这叫包装,就像包装那个append方法 现在我们来做一个open方法 class Open: def __init__(self,filename,mode="r",encoding="utf8"): self.filename=filename self.mode=mode self.encoding=encoding def __getattr__(self, item): print(item) f1=Open

操作系统+编程语言的分类+执行python程序的两种方式+变量

1.什么是操作系统? 操作系统就是一个协调\管理\控制计算机硬件资源与软件资源的一个控制程序. 2.为何要操作系统? a.把复杂的硬件操作封装成简单的功能\接口用来给用户或者程序来使用(文件) b.把应用程序对硬件的竞争变得有序 3.如何用操作系统? 一套完整的计算机系统分为3层: 应用程序层 操作系统层 计算机硬件层 编程语言的分类 1.机器语言:直接使用二进制指令去编高于写程序(直接操作硬件) 优点:计算机无障碍理解,运行效率高. 缺点:开发效率低 2.汇编语言:使用英文标签代替二进制指令去

python 中特殊方法简写方式

##python 中特殊方法简写方式 class Test: __call__ = lambda *args: args[1] * 2 #这里需要注意lambda的参数 会默认将实例self 加进去 __str__ = lambda self: 'that`s useful...%s' % self.__class__.__name__ t = Test() print(t) print(t(10)) 原文地址:https://www.cnblogs.com/alplf123/p/1029388