创建继续嵌套for循环

时间:2016-07-13 19:01:43

标签: python loops

是否可以编写一个向嵌套循环添加更多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)

1 个答案:

答案 0 :(得分:3)

您可以使用生成笛卡尔积的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

Thanx,这完全符合我的要求,但我尝试不使用任何内置函数。 -

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

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