Un’espressione in parentesi quadre produce una lista al volo
1 2 3 |
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
1 2 3 4 5 6 7 |
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
1 |
lista=[x*x for x in [0, 1, 2, 3, 4] if x%2] # [1, 9] |
Anche con un doppio for
1 2 |
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…)
1 |
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)
1 |
somma=sum(x*y for x in [0, 1, 2] for y in [10, 20, 30]) # 180 |