【问题标题】:Create list of combinations创建组合列表
【发布时间】:2014-11-05 17:56:43
【问题描述】:

我想创建一个包含三个值的数字列表,并希望涵盖从 0 到 3 的所有组合。例如:

0, 0, 0
0, 0, 1
...
1, 0, 3
1, 1, 3

一直到3, 3, 3

有没有比使用多个 for 循环更好的方法来做到这一点?

这是我使用的代码:

for i in range (0, 4):
    for x in range (0, 4):
        for t in range (0, 4):
        assign = [i, x, t]

【问题讨论】:

    标签: python list combinations


    【解决方案1】:

    通常itertools.product:

    list(itertools.product(range(4), repeat=3))

    【讨论】:

      【解决方案2】:

      您可以为此使用itertools.product() 函数:

      from itertools import product
      
      for i, x, t in product(range(4), repeat=3):
          print (i, x, t)
      

      演示:

      >>> from itertools import product
      >>> for i, x, t in product(range(4), repeat=3):
      ...     print (i, x, t)
      ... 
      (0, 0, 0)
      (0, 0, 1)
      (0, 0, 2)
      (0, 0, 3)
      (0, 1, 0)
      # ... truncated for readability ...
      (3, 2, 3)
      (3, 3, 0)
      (3, 3, 1)
      (3, 3, 2)
      (3, 3, 3)
      

      【讨论】:

        【解决方案3】:

        你可以使用itertools.product:

        >>> from itertools import product
        >>> list(product({0, 1, 2, 3}, repeat=3))
        [(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 2, 0), (0, 2, 1), (0, 2, 2), (0, 2, 3), (0, 3, 0), (0, 3, 1), (0, 3, 2), (0, 3, 3), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 0), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 0), (1, 3, 1), (1, 3, 2), (1, 3, 3), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 0), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 0), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 0, 0), (3, 0, 1), (3, 0, 2), (3, 0, 3), (3, 1, 0), (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 0), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 0), (3, 3, 1), (3, 3, 2), (3, 3, 3)]
        >>>
        

        【讨论】:

          【解决方案4】:

          itertools.product() 是一个很好的解决方案,但如果你碰巧想要一个列表而不是元组,你可以使用这个:

          [ [x,y,z] for x,y,z in itertools.product(range(4), repeat=3)]
          

          或等效的列表理解:

          [ [x,y,z] for x in range(0,4)
                      for y in range(0,4)
                          for z in range(0,4)]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-01
            相关资源
            最近更新 更多