分享
三行代码  ›  专栏  ›  技术社区  ›  sohrab haghayegh

如何在彼此内部自动定义m循环,以生成具有所有唯一组合的n^m行表?

  •  0
  • sohrab haghayegh  · 技术社区  · 3 月前

    每个n项可以有m个状态,我们可以用m个迭代在彼此内部编写n个循环,但问题是当n更改为n+1时,我们需要添加另一个循环…

    我要为n=3,m=2生成的表如下:

    m = 2
    n = 3
    for i in range(m):
            for j in range(m):
                for k in range(m):
                    print(i+1, j+1, k+1)
    
    1 1 1
    1 1 2
    1 2 1
    1 2 2
    2 1 1
    2 1 2
    2 2 1
    2 2 2
    

    当n=4时,m=2

    for i in range(2):
        for j in range(2):
            for k in range(2):
                for l in range(2):
                    print(i+1, j+1, k+1, l+1)
    1 1 1 1
    1 1 1 2
    1 1 2 1
    1 1 2 2
    1 2 1 1
    1 2 1 2
    1 2 2 1
    1 2 2 2
    2 1 1 1
    2 1 1 2
    2 1 2 1
    2 1 2 2
    2 2 1 1
    2 2 1 2
    2 2 2 1
    2 2 2 2
    

    如何编写可以与任何m和n值一起使用的代码?

    1 回复  |  直到 3 月前
        1
  •  0
  •   DeepSpace    3 月前

    itertools.product

    from itertools import product
    
    m = 2
    n = 3
    
    print('\n'.join(' '.join(map(str, prod)) for prod in product(range(1, m + 1), repeat=n)))
    

    1 1 1
    1 1 2
    1 2 1
    1 2 2
    2 1 1
    2 1 2
    2 2 1
    2 2 2
    

    m n