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