for i in range(3): for j in range(3): if i * j > 2: break else: continue break else: print('Never broke')
Iteration Patterns

Meaning

The snippet iterates over two ranges with nested loops, breaking out of both loops as soon as the product of the indices exceeds a threshold. If no break occurs, the outer else clause triggers a fallback action. It is used to detect a condition early and handle the case where the condition never occurs.

Primary Function

Control flow

Communicative Purpose

Ensures early exit from nested loops when a condition is met, otherwise executes a fallback action.

Pattern

for outer_var in range(outer_limit): for inner_var in range(inner_limit): if condition(outer_var, inner_var): break else: continue break else: fallback_action()

Core Structure

for ... in ...: for ... in ...: if ...: break else: continue break else: ...

Função primária

Control flow

Propósito comunicativo

Ensures early exit from nested loops when a condition is met, otherwise executes a fallback action.

Situações de gatilho

Grid search: stop scanning when the product of indices exceeds a threshold Matrix traversal: exit both loops immediately after finding a target cell

Contextos

Algorithm implementations, search problems, combinatorial generation scripts, educational examples of loop control.

Padrão

for outer_var in range(outer_limit): for inner_var in range(inner_limit): if condition(outer_var, inner_var): break else: continue break else: fallback_action()

Estrutura central

for ... in ...: for ... in ...: if ...: break else: continue break else: ...

Slots de substituição

outer_var: int, outer_limit: int ≥ 0, inner_var: int, inner_limit: int ≥ 0, condition: callable[[int, int], bool], fallback_action: callable or statement

Colocados típicos

  • break
  • continue
  • for-else
  • nested loops
  • early exit
  • fallback action

Substituições comuns

  • Use a flag variable to track condition instead of for-else – clearer to readers unfamiliar with for-else Replace nested loops with a generator expression and any() – more concise for simple predicates Use itertools.product with a break flag – reduces manual nesting

Erros comuns

Placing the break in the outer loop instead of the inner one, causing premature termination of the entire search Assuming the else clause belongs to the outer loop, leading to the fallback never executing Forgetting the else clause entirely, so the fallback action is omitted when no break occurs Using mutable default arguments in the condition function, resulting in unexpected state across iterations Confusing continue with break inside the inner loop, altering the intended control flow

Similar / contraste

while-else pattern – similar semantics but with while loops Flag-variable approach – achieves the same early exit without for-else syntax

Interferências

Coming from C: expecting an else clause after a for loop → Python's for-else executes only when the loop completes without a break

Família do chunk

  • loop_control
  • early_exit
  • for_else
  • nested_loops

Nuance

Do not use this pattern when the loop body is complex; a flag variable may be clearer The additional else and continue clauses add negligible runtime overhead but can impact readability The outer else runs only if the outer loop finishes without encountering a break; nested else applies to the inner loop only

Efeito pragmático

Provides a compact way to exit nested loops early and handle the no‑match case without extra flag variables, reducing boilerplate and potential bugs.

Dica de memória

Think of the nested loops as a search party: they keep looking until someone finds the treasure (break); if nobody finds it, they report back (else).

Nota

The outer break after the inner else ensures that once the inner loop breaks, the outer loop also terminates, mimicking a double break.

Upgrade path

Replace the nested loops with a generator expression and any() for concise condition checking.

Frequência: LowFormulaicidade: Semi-fixedTipo de construção: codePrioridade de aquisição: Passive recognitionPrioridade de output: BothTag de espaçamento: Medium-term

Log in to save chunks.