产生一个序列的所有排列组合

比如给定【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]]
排列

 

 

posted on 2018-06-08 14:06  温润有方  阅读(684)  评论(0编辑  收藏  举报