2017-08-24 147 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'是什麼。無論是自定義類型還是簡單數組。我選擇在翻譯時保持原始代碼的準確性,但您可能是對的。所以我會做一個筆記。 –