我遇到了一种情况,我需要实现一个具有多个循环控制变量的 for 循环。基本上这就是我想要做的
爪哇:
for (int i=0,j=n; i<n,j>=0; i++, j--)
do my stuff
Run Code Online (Sandbox Code Playgroud)
我如何在 Python 中做到这一点?
for i in range(0,n), j in range(n-1,-1,-1):
do my stuff
Run Code Online (Sandbox Code Playgroud)
但这不起作用。这里的正确语法是什么?另外,用例是否有更优雅的(pythonic)构造?
对于您的具体示例,您似乎不需要在循环定义本身中使用单独的变量。您可以通过执行 ni 迭代 i 值并构造 j 值:
for i in range(0, n):
j = n-i
# do stuff
Run Code Online (Sandbox Code Playgroud)
通常,for如果它们相互依赖,则不能在语句中指定多个值。相反,使用 for 迭代一些“基本”值或可以从中派生其他值的值。
您可以在for循环中指定多个值,但它们必须从单个可迭代对象中提取:
for i, j in zip(range(0, n), range(n, 0, -1)):
# do stuff
Run Code Online (Sandbox Code Playgroud)
这需要 i 从第一个范围(0 到 n-1)和 j 从第二个(n 到 1)。 zip通过按组件配对您给它的可迭代对象的元素来创建一个新的可迭代对象。
需要记住的是,Pythonfor循环不像 Java/C 中的循环,后者具有初始化/检查结束条件/更新结构,重复修改某些持久循环索引变量。Pythonfor循环遍历“源”可迭代对象提供的“流”值,一次从源中获取一个值。(这类似于foreach其他一些语言中的 -type 构造。)无论您想迭代什么,都需要在开始循环之前将其放入可迭代对象中。换句话说,每个 Python for 循环都可以被认为大致类似于以下内容:
for (i=iterable.getNextValue(); iterable.isNotEmpty(); i=iterable.getNextValue())
Run Code Online (Sandbox Code Playgroud)
你不能让循环初始化与循环更新不同,你不能让那些是“获取下一个值”以外的任何操作,你不能让结束条件是“是迭代耗尽”。如果你想做这样的事情,你必须在循环内自己做(例如,通过在我的例子中分配一个辅助“循环变量”,或者通过检查自定义循环退出条件并中断),或者将其构建到您正在迭代的“源”中。