68

continuePython で 2 つのネストされたループの親ループを作成するにはどうすればよいですか?

for a in b:
    for c in d:
        for e in f:
            if somecondition:
                <continue the for a in b loop?>

ほとんどの場合、これを回避できることはわかっていますが、Pythonで実行できますか?

4

7 に答える 7

61
  1. 内側のループから抜けます (その後に他に何もない場合)
  2. 外側のループの本体を関数に入れ、関数から戻る
  3. 例外を発生させ、外部レベルでキャッチします
  4. フラグを設定し、内側のループから抜け出し、外側のレベルでテストします。
  5. コードをリファクタリングして、これを行う必要がなくなります。

毎回5人で行きます。

于 2013-02-12T09:53:48.960 に答える
25

これを行うためのハックな方法を次に示します。

  1. ローカル関数を作成する

    for a in b:
        def doWork():
            for c in d:
                for e in f:
                    if somecondition:
                        return # <continue the for a in b loop?>
        doWork()
    

    より良いオプションは、doWork を別の場所に移動し、その状態を引数として渡すことです。

  2. 例外を使用する

    class StopLookingForThings(Exception): pass
    
    for a in b:
        try:
            for c in d:
                for e in f:
                    if somecondition:
                        raise StopLookingForThings()
        except StopLookingForThings:
            pass
    
于 2013-02-12T10:05:54.980 に答える
12
from itertools import product
for a in b:
    for c, e in product(d, f):
        if somecondition:
            break
于 2013-02-12T10:07:51.527 に答える
11

break内側のループから抜け出し、親で続行するために使用します

for a in b:
    for c in d:
        if somecondition:
            break # go back to parent loop
于 2013-02-12T09:53:40.520 に答える
0
lista = ["hello1", "hello2" , "world"]

for index,word in enumerate(lista):
    found = False
    for i in range(1,3):
        if word == "hello"+str(i):
            found = True
            break
        print(index)
    if found == True:
        continue
    if word == "world":
        continue
    print(index)


    

今何が印刷されています:

>> 1
>> 2
>> 2

これは、単語 no.1 ( index = 0 ) が最初に出現したことを意味します (continue ステートメントの前に何かを出力する方法はありません)。単語 no.2 ( index = 1 ) が 2 番目に表示され (単語 "hello1" はなんとか印刷されましたが、残りは印刷されませんでした )、単語 no.3 が 3 番目に表示されました。 forループがこの3番目の単語に到達する前に出力されました。

要約すると、found = False / True ブール値と break ステートメントを使用するだけです。

それが役に立てば幸い!

于 2022-02-07T19:06:14.620 に答える