zoukankan      html  css  js  c++  java
  • python 排列组合

    #coding:utf-8
    __author__ = 'similarface'
    '''
    序列的排列组合
    '''
    def permute(list):
        '''
        序列的排列数: abc=abc,acb,bac,aca,cab,cba
        :param list:
        :return:
        '''
        #接受任何序列
        if not list:
            #返回空序列
            return [list]
        else:
            res=[]
            for i in range(len(list)):
                #删除当前节点
                rest=list[:i]+list[i+1:]
                #排列其他的节点
                for x in permute(rest):
                    #把当前节点添加到前面
                    res.append(list[i:i+1]+x)
            return res
    
    def subset(list, size):
        '''
        子排列
        :param list:
        :param size:
        :return:
        '''
        if size == 0 or not list:
            return [list[:0]]
        else:
            result=[]
            for i in range(len(list)):
                pick = list[i:i+1]
                rest = list[:i] + list[i+1:]
                for x in subset(rest, size-1):
                    result.append(pick + x)
            return result
    
    def combo(list, size):
        '''
        组合数
        :param list:
        :param size:
        :return:
        '''
        if size == 0 or not list:
            return [list[:0]]
        else:
            result = []
            for i in range(0, (len(list) - size) + 1):
                #重i出截断
                pick = list[i:i+1]
                rest = list[i+1:]
                #截断位置后的list继续组合
                for x in combo(rest, size - 1):
                    result.append(pick + x)
            return result
    
    if __name__=="__main__":
        print(permute([1,2,3]))
        print(permute('abc'))
        print(combo('abc', 2))
        print(subset([1, 2, 3], 2))
        '''
        [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
        ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
        ['ab', 'ac', 'bc']
        [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]
        '''
  • 相关阅读:
    1. C/C++项目一
    3. C/C++笔试面试经典题目三
    1. C/C++笔试面试经典题目一
    Win7下C/C++跨平台开发工具IDE的安装之Eclipse-CDT
    Win7下C/C++跨平台开发工具IDE的安装之CodeBlocks
    css
    form表单,选择器
    html介绍
    元类
    事务、视图、触发器、存储过程、函数、数据库的备份
  • 原文地址:https://www.cnblogs.com/similarface/p/5129251.html
Copyright © 2011-2022 走看看