在 python 中循环多个变量(并非所有变量都是有限的甚至是已知序列)

Looping on more than one variable (not all of them are finite or even known sequences) in python

如果不是所有变量都是已知序列或有限序列,如何在 python 中循环多个变量?

换句话说,如何在 python?[=12= 中创建与此 C++ 代码类似的代码]

int y = 7;
int z = 3, dz = 5;
for (int x = 0; x < 20; ++x, ++y, z += dz){
    cout << x << " " << y << " " << z << endl;
}

在此示例中,x 边界定义明确。但是,y 和 z 不是。

我设法通过结合 python 中的两个功能来做到这一点:内置函数 zip()generator functions.

我先定义了一个生成器increment_by(base, addon) 如下:

def increment_by(base, addon):
    while True:
        yield base
        base += addon

然后我将它与其他生成器/序列一起传递给 zip 函数。 最后我循环 zip() 的下一个值。

N.B。其中一个序列生成器应该是有限的,否则,您的应用程序可能会崩溃。

y, z, dz = 7, 3, 5
print('==>', y, z)
for x, y, z in zip(range(20), increment_by(y, 1), increment_by(z, dz)):
    print(x, y, z)
print()
print('==>', y, z)

输出是

==> 7 3
0 7 3
1 8 8
2 9 13
3 10 18
4 11 23
5 12 28
6 13 33
7 14 38
8 15 43
9 16 48
10 17 53
11 18 58
12 19 63
13 20 68
14 21 73
15 22 78
16 23 83
17 24 88
18 25 93
19 26 98
==> 26 98

这里的好处是,通过在 in 运算符之前使用相同的变量名,我可以在循环内和循环后使用相同的变量值。这是可能的,因为解释器获取生成器对象,对其调用 next(),并以适合分配给任何变量(包括原始变量本身)的方式将产生的值调用 return。因此,使用原始变量将使其值在每次迭代中得到更新,并在循环外保持更新。

更新: 正如@Iain Shelvington 提到的,有一个内置的生成器函数 (itertools.count(start=0, step=1)) 具有完全相同的功能,并且在与 increment_by(base, addon).

相同的顺序