双循环的迭代计数器

Iteration counter for double loops

我正在尝试找到计算此双 for 循环(例如 python 中的每次迭代)的公式:

for i in range(5):
   for j in range(5):
       count = MYSTERIOUS_FORMULA
       print count

这里count的最终值应该是25。

我尝试了 count=(i+1)*j 但它产生了 0,1,2,3,4,0,2,4 等等

双循环(a.k.a。嵌套循环)。

# Set count to 0 before loop starts
count = 0

for i in range(5):
    for j in range(5):
        # solved mysterious formula (short hand 'count = count + 1')
        count += 1
# displaying count after loop
print(count)

扩展公式 count = count + 1,这会将 count 设置为 equal 本身 + 1:

count = count + 1

如果您想在每次迭代中计算数字:

for i in range(5):
   for j in range(5):
       count = 5*i+j+1
       print count

最简单的方法是使用 itertools.product and enumerate:

from itertools import product

for idx, (i, j) in enumerate(product(range(5), range(5)), 1):
    print(idx, i, j)

打印:

1 0 0
2 0 1
3 0 2
4 0 3
5 0 4
[...]
24 4 3
25 4 4

神秘的公式很简单:

{count} = {index of current loop} + {size of current loop}*{count of parent loop}

例如,考虑一个循环:

x = 5

for i in range(x):
    count = i

明确地说,count = i + x*0但是第二项无关紧要,因为没有父循环。两个循环的示例可能更具启发性:

x = 5
y = 6

for i in range(x):
    for j in range(y):
        count = j + y*(i)

请注意,我将 i 放在括号中以强调它是 {count of parent loop}。这个公式可以很容易地扩展到第三个循环:

x = 5
y = 6
z = 7

for i in range(x):
    for j in range(y):
        for k in range(z):
            count = k + z*(j + y*(i))

等等...