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


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

  • 相关阅读:
    HDU1251统计难题map+输入
    HDU1863畅通工程
    POJ2253 Frogger
    HDU 4725 (The Shortest Path in Nya Graph)层次网络
    hdu5521(Meeting)spfa 层次网络最短路
    Fire Net ZOJ 1002
    POJ3259(Wormholes) 判断负环
    POJ3268(Silver Cow Party)
    棋盘问题 POJ 1321
    POJ 1661 (Help Jimmy )
  • 原文地址:https://www.cnblogs.com/yu-liang/p/9155345.html
Copyright © 2020-2023  润新知