产生一个序列的所有排列组合
比如给定【1,2,3】要算出他的所有排列组合
1 def perm(l): 2 ''' 3 通过一个序列,生成它的所有排列组合的列表 4 :param l: 给定的固定序列l,可以是列表,元组 5 :return: 返回包含该固定序列的任意排列的一个序列(列表),列表中存放列表 6 ''' 7 if len(l) <= 1: # 如果该序列只有一个值或没有值, 8 return [l] # 返回该序列 9 10 # 对于该序列有多个值 11 r = [] # 空列表,用于存放所有序列的列表 12 for i in range(len(l)): # 对于l中的每一位元素 13 s = l[:i] + l[i + 1:] # 生成不包含当前元素的固定序列列表s 14 p = perm(s) # 对于固定列表s,生成它的排列组合的列表 15 for x in p: # 对于包含所有排列组合的列表中的每一项,即每一个序列 16 a = l[i:i + 1] + x # 把l中去除的项和该序列结合生成一个新的序列 17 # 即生成:以l[i]开头接后面随意排列的项 18 r.append(a) # 把新生成的项加入到总的列表中 19 return r 20 21 l = [1, 2, 3, 4] 22 print(perm(l)) 23 ------------------------------------------------------------ 24 [[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3], [1, 4, 3, 2], [2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1], [2, 4, 1, 3], [2, 4, 3, 1], [3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4], [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1], [4, 1, 2, 3], [4, 1, 3, 2], [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]]