2017-08-24 144 views
1

在一个典型的类似C语言中,for循环为您提供了对迭代的更多控制。我不知道该怎么办equivilent有条件地停止for循环for python

for(int i = 0; i < A.length; i++) { 
    do_things(A[i]); 
    if (is_true(i)) { 
    i--; 
    } 
} 

在Python?

在其他语言中,我选择使用它们的基于循环结构的容器,但它们通常具有我可以用于这种情况的循环的香草。在Python中迭代时如何获得更多的“控制”?

我想这个答案是非常基本的,但搜索条件与其他问题混淆。

+1

你必须使用while循环等价,或者写一个迭代有了这个能力。 –

+0

我建议你使用Python迭代功能。正如许多人所了解的,你可以*改变循环内的迭代变量。然而,评估数组大小和其他副作用可能会让你感到惊讶,因为Python有一些不同的优化和变量处理。 – Prune

+1

另外,请注意,在迭代参数中进行这样的更改是一种危险的做法。在过去10-15年中我加入的开发小组中,您发布的代码无法通过审核。 – Prune

回答

1

在Python最好相当于将是一个while -loop:

i = 0 
while i < A.length: # If `A` is a regular Python container type, use `len()` 
    do_things(A[i]) 
    if is_true(i): 
     i -= 1 
    i += 1 

不过请注意,如评论所说,迭代这样在容器往往不是,是一个坏主意。你应该检查你的代码,并确保你确实需要这种行为。


编辑

这是一个循环,这并不继续到下一个元素,直到某些条件得到满足的只是一个草率的解释。我没有解释清楚不过我想

使用continue代替即可。递减i是错误的动作:

i = 0 
while i < A.length: 
    do_things(A[i]) 
    if not is_true(i): 
     continue 
    i += 1 

更重要的是,你可以沟while -loop一起,使用enumerate

for i, el in enumerate(A): 
    if not is_true(el): 
     continue 
    # do work 
+0

'A.length'通常不会工作(太多的Javascript?)。你可能是指'len(A)':-) – mgilson

+0

@mgilson嗯。不完全是。我不是确切的;确定'A'是什么。无论是自定义类型还是简单数组。我选择在翻译时保持原始代码的准确性,但您可能是对的。所以我会做一个笔记。 –