比如多重循环,从内向外分别是4、3、2重循环,一般是通过3层for循环即可。
对于不确定循环的深度时,可以使用单重循环达到相同的效果,循环内部仍可唯一定位到是多重循环下的哪个迭代。
#!/usr/bin/python3
#coding=utf-8
def multiloop(loop_arr):
cnt = []
s = 1
L = len(loop_arr)
for i in range(L):
cnt.append(0)
s = s * loop_arr[i]
for i in range(s):
j = 0
while(cnt[j] == loop_arr[j]):
cnt[j] = 0
cnt[j+1] += 1
j += 1
print(f'{i}:'+ ",".join([str(cnt[k]) for k in range(L)]))
cnt[0] += 1
for i1 in range(2):
for i2 in range(3):
for i3 in range(4):
print(f"{i3}-{i2}-{i1}")
print("4-3-2")
multiloop([4,3,2])
multiloop([4,3,2]),即是从内向外分别4重、3重、2重循环。
multiloop([4,3,2])内部通过计算4*3*2 = 24来得到单重循环的次数。然后通过cnt数组推算当前的单重循环迭代,对应的是多重循环中i1/i2/i3 是那种组合。实际应用中,可i1/i2/i3可能是不同属性的下标。