#coding:utf-8__author__ = 'similarface''''序列的排列組合'''def permute(list): ''' 序列的排列數: abc=abc,acb,bac,aca,cab,cba :param list: :return: ''...
#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]] '''