代码之家  ›  专栏  ›  技术社区  ›  PhD Gangstead

如何在Python中从列表中生成所有可能的数字排列?

  •  1
  • PhD Gangstead  · 技术社区  · 8 年前

    问题:给出3个数字的列表 [4, 8, 15]

    3*3*3 = 27

    4,4,4
    4,4,8
    4,4,15
    4,8,4
    4,8,8
    4,8,15
    4,15,4
    4,15,8
    4,15,15
    ...
    

    itertools.permutations 和 itertools.combinations 但我不能得到全部27个值。

    list(itertools.permutations([4,8,15],3)) 例如,仅打印6个值:

    [(4, 8, 15), (4, 15, 8), (8, 4, 15), (8, 15, 4), (15, 4, 8), (15, 8, 4)]

    有什么现成的吗?或者这更像是一个“自己动手”的问题?

    3 回复  |  直到 8 年前
        1
  •  1
  •   Lucas Piyush S. Wanare    8 年前

    permutations 具有 product

    len(list(itertools.permutations([4,8,15],3)))
    # return 6
    len(list(itertools.product([4,8,15], repeat=3)))
    # return 27
    
        2
  •  0
  •   iajrz    8 年前

    答案还在 itertools . 调用的函数 product 它需要两个参数:第一个是具有可用元素的iterable,第二个是iterable可以重复自身的次数。

    itertools.product([4,8,15],repeat=3)

    原因是什么 permutations 或 combinations 不为你工作是因为他们不允许项目重复它们自己; 产品 计算笛卡尔积,允许重复项。

        3
  •  -1
  •   JulianP    8 年前

    此代码打印您请求的内容:)

    list = [4,8,15]
    
    for i in range(len(list)):
        for j in range (len(list)):
            for k in range (len(list)):
                print ("("+str(list[i]) +","+str(list[j])+","+str(list[k])+")\n")