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]]
        '''
  • 相关阅读:
    面试题:能谈谈Date、Datetime、Time、Timestamp、year的区别吗?
    面试题:对NotNull字段插入Null值 有啥现象?
    聊聊什么是慢查、如何监控?如何排查?
    谈谈MySQL的基数统计
    .vimrc
    HISKrrr的板子库
    CSP 模拟35
    晚测1
    CSP 模拟34
    nim板子题异或正确性YY
  • 原文地址:https://www.cnblogs.com/similarface/p/5129251.html
Copyright © 2011-2022 走看看