[解決済み] Pythonです。外周ループで次の反復に進む
質問
Pythonのアウターループで次の反復に進むための組み込みの方法があるかどうかを知りたかったのです。 例えば、次のようなコードを考えてみましょう。
for ii in range(200):
for jj in range(200, 400):
...block0...
if something:
continue
...block1...
このcontinue文は、jjループを終了し、iiループの次のアイテムに移動したいです。 このロジックは他の方法(フラグ変数を設定する)で実装することができますが、これを行う簡単な方法はありますか?
どのように解決するのですか?
for i in ...:
for j in ...:
for k in ...:
if something:
# continue loop i
一般的なケースでは、複数レベルのループがある場合や
break
がうまくいかない場合 (現在のループのすぐ上ではなく、上のループを継続したいため) は、次のいずれかを実行します。
脱出したいループを関数にリファクタリングする。
def inner():
for j in ...:
for k in ...:
if something:
return
for i in ...:
inner()
不利な点は、新しい関数に、以前はスコープ内にあった変数を渡す必要があるかもしれないことです。パラメータとして渡すか、オブジェクトのインスタンス変数にするか(この関数のためだけに新しいオブジェクトを作成する、それが意味をなすなら)、グローバル変数、シングルトン、何でもありです(えーと、えーと)。
または
inner
を入れ子にして、必要なものだけを取り込むようにします (もっと遅いかも?)。
for i in ...:
def inner():
for j in ...:
for k in ...:
if something:
return
inner()
例外を利用する
哲学的に言えば、例外とは、構造化されたプログラミングの構成要素(if, for, while)を通じて、必要に応じてプログラムの流れを断ち切るためにあるものなのです。
メリットは、1つのコードを複数に分割する必要がないことです。Pythonで書きながら設計しているのが何らかの計算であれば、これは良いことです。この早い段階で抽象化を導入すると、スピードが落ちる可能性があります。
この方法の悪い点は、インタプリタやコンパイラの作者は通常、例外は例外であると仮定し、それに応じて最適化することです。
class ContinueI(Exception):
pass
continue_i = ContinueI()
for i in ...:
try:
for j in ...:
for k in ...:
if something:
raise continue_i
except ContinueI:
continue
このために特別な例外クラスを作成し、誤って他の例外を黙殺してしまうリスクを回避するようにします。
全く別のもの
まだ他にも解決策はあると思います。
関連
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
PicgoのイメージベッドツールをPythonで実装する
-
Pythonによるjieba分割ライブラリ
-
Python百行で韓服サークルの画像クロールを実現する
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない