Liste implicite

Un’espressione in parentesi quadre produce una lista al volo

lista = [ x        for x in [0, 1, 2, 3, 4] ]     # [0, 1, 2, 3, 4]
lista = [ x*x      for x in [0, 1, 2, 3, 4] ]     # [0, 1, 4, 9, 16]
lista = [ str(x*x) for x in [0, 1, 2, 3, 4] ]     # ['0', '1', '4', '9', '16']

I dati possono provenire da qualsiasi sequenza

sequenza = {0:'a', 1:'b', 2:'c', 3:'d', 4:'e'}  # dizionario
sequenza = {0, 1, 2, 3, 4}                      # insieme
sequenza = range(5)                             # intervallo
sequenza = [0, 1, 2, 3, 4]                      # lista
sequenza = (0, 1, 2, 3, 4)                      # tupla

lista = [ x*x for x in sequenza ]               # [0, 1, 4, 9, 16]

Anche con delle condizioni

lista = [ x*x for x in [0, 1, 2, 3, 4] if x%2 ]             # [1, 9]

Anche con un doppio for

lista = [ y   for x in [0, 1, 2] for y in [10, 20, 30] ]    # [10, 20, 30, 10, 20, 30, 10, 20, 30]
lista = [ x*y for x in [0, 1, 2] for y in [10, 20, 30] ]    # [0, 0, 0, 10, 20, 30, 20, 40, 60]

Parentesi graffe

Se l’espressione è delimitata da parentesi graffe allora produce un insieme (senza ripetizioni…)

lista = { x*y for x in [0, 1, 2] for y in [10, 20, 30] }    # {0, 40, 10, 20, 60, 30}

Parentesi tonde

Se l’espressione è delimitata da parentesi tonde allora diventa un generatore di espressioni, restituisce un iteratore (più efficiente nel consumo di memoria rispetto alla lista)

somma = sum( x*y for x in [0, 1, 2] for y in [10, 20, 30] )  # 180