创建继续嵌套循环



是否可以编写一个函数,向嵌套循环添加更多for循环。所以假设我有一个函数for_loops(3).

    def for_loops(n):
        a = []
        for add_v in range(n):
            a.append("AB")
        for i in range(len(a[0])):
            for j in range(len(a[1])):
                for k in range(len(a[2])):
                    print(a[0][i]+" "+a[1][j]+" "+a[2][k])
   for_loops(3)

然后for_loops(4)

    def for_loops(n):
        a = []
        for add_v in range(n):
            a.append("AB")
        for i in range(len(a[0])):
            for j in range(len(a[1])):
                for k in range(len(a[2])):
                    for l in range(len(a[3])):
                        print(a[0][i]+" "+a[1][j]+" "+a[2][k]+" "+a[3][l])
   for_loops(4)

您可以使用生成笛卡尔乘积的itertools.product获得类似的结果

def for_loops(n):
    from itertools import product
    for row in product("AB", repeat = n):
        print " ".join(row)

它的工作方式是,给定一个集合,它将生成 n 个基数的笛卡尔乘积,即

(A, B) X (A, B) X (A, B) .... n
  • 对于n = 4来说,这将是(A, B) X (A, B) X (A, B) X (A, B)
  • 对于n = 3来说,这将是(A, B) X (A, B) X (A, B)

下面显示了使用 n = 4 运行的示例,它与 4 个嵌套循环的结果相匹配

>>> for_loops(4)
A A A A
A A A B
A A B A
A A B B
A B A A
A B A B
A B B A
A B B B
B A A A
B A A B
B A B A
B A B B
B B A A
B B A B
B B B A
B B B B

编辑 1

谢谢,这完全符合我想要它做的事情,但我正在尝试在不使用任何内置函数的情况下做到这一点。

如果您不想使用任何内置函数,以下可能是您的替代方法

def for_loops(n):
    for i in range(2**n):
        print " ".join("AB"[int(j)] for j in "{:04b}".format(i))

最新更新