(x*y for x in range(3) for y in range(4))
Iteration Patterns

Meaning

This pattern creates a generator expression that yields the product of two loop variables, iterating over nested ranges. It is used when you need to lazily compute values from a Cartesian product without building an intermediate list.

Primary Function

Data generation

Communicative Purpose

Efficiently produce items from nested loops on demand.

Pattern

(expression for var1 in iterable1 for var2 in iterable2)

Core Structure

(... for ... in ... for ... in ...)

Função primária

Data generation

Propósito comunicativo

Efficiently produce items from nested loops on demand.

Situações de gatilho

When you need to iterate over all pairs of indices from two ranges, e.g., generating coordinates, performing pairwise operations, or feeding into functions like sum() or list().

Contextos

Common in scientific computing, data processing scripts, and any code that uses comprehensions for memory efficiency.

Padrão

(expression for var1 in iterable1 for var2 in iterable2)

Estrutura central

(... for ... in ... for ... in ...)

Slots de substituição

expression: the value to yield (e.g., x*y); var1: first loop variable; iterable1: first iterable (e.g., range(3)); var2: second loop variable; iterable2: second iterable (e.g., range(4)).

Colocados típicos

  • sum()
  • list()
  • any()
  • all()
  • max()
  • min()
  • itertools.chain
  • other generator expressions
  • nested comprehensions.

Substituições comuns

  • List comprehension [expression for var1 in iterable1 for var2 in iterable2]
  • using itertools.product
  • using nested for loops.

Erros comuns

Forgetting parentheses causing syntax error; using commas instead of 'for' clauses; expecting immediate list instead of generator; causing StopIteration if consumed twice.

Similar / contraste

List comprehension [x*y for x in range(3) for y in range(4)] (eager evaluation); generator expression with single loop (x*2 for x in range(5)). Distinction: lazy vs eager.

Interferências

Coming from languages with eager list comprehensions (e.g., JavaScript array map): may expect immediate results; need to remember generator is lazy.

Família do chunk

  • generator expression
  • list comprehension
  • set comprehension
  • dict comprehension

Nuance

Generator expression is exhausted after one iteration; if you need to reuse, convert to list or use itertools.tee. Performance: lower memory overhead but slight per-item overhead.

Efeito pragmático

Enables memory-efficient processing of large Cartesian products.

Dica de memória

Think of nested for loops inside parentheses, yielding each product on demand.

Nota

Generator expressions are lazy; they produce items one at a time and are exhausted after a single iteration. To reuse values, materialize with list() or use itertools.tee. They have lower memory overhead than list comprehensions but slight per-item overhead.

Upgrade path

Using itertools.product for more complex iterables: itertools.product(range(3), range(4)) yields tuples; then map with operator.mul.

Frequência: MediumFormulaicidade: Semi-fixedTipo de construção: nested generator expressionPrioridade de aquisição: Active recallPrioridade de output: BothTag de espaçamento: Short-term

Log in to save chunks.