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

问题描述

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

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

<!DOCTYPE html>
<html lang="en">
<head>
  <Meta charset="UTF-8">
  <Meta http-equiv="X-UA-Compatible" content="IE=edge">
  <Meta name="viewport" content="width=device-width,initial-scale=1.0">
</head>
<body>
  <div class="btn-container">
    <button class="btn-container__left btn-container__left--selected">Fixed Offset</button>
    <button class="btn-container__right"> Linear Drift</button>
  </div>
</body>
</html>

在这个例子中,x 边界是明确定义的。但是,y 和 z 不是。

解决方法

我通过结合 Python 中的 2 个功能来做到这一点:内置函数 zip()generator functions

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

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

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

注意序列生成器之一应该是有限的,否则,您的应用程序可能会崩溃。

y,z,dz = 7,3,5
print('==>',y,z)
for x,z in zip(range(20),increment_by(y,1),increment_by(z,dz)):
    print(x,z)
print()
print('==>',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(),并以适合分配给任何变量(包括原始变量本身)的方式返回产生的值。因此,使用原始变量将使其值在每次迭代时更新,并在循环外保持更新。

更新: 正如@Iain Shelvington 所提到的,有一个内置生成器函数 (itertools.count(start=0,step=1)) 执行完全相同的功能,并且它采用与 {{ 相同顺序的相同参数1}}。