Richiami di Python: le * comprehension
17-11-2022
List/dict/set comprehension + Generator Expressions
PYTHON
17-11-2022
List/dict/set comprehension + Generator Expressions
Usa questa forma [expr di elaborazione item for item in iterable if condition]
numeri = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lista = [n*n for n in numeri if n%2 == 1] # mi ritorna una lista [1, 9, 25, 49, 81]
Usa questa forma {key_expr: val_expr for item in iterable if condition} Oggetto di partenza è un iterabile (lista, stringa, ...) e mi fornisce un dict
stringa = 'cat'
d = {k: ord(k) for k in stringa} # {'c': 99, 'a': 97, 't': 116}
{expr for item in iterable if condition} Ovviamente non mi comprenderà i doppioni
stringa = 'gatto'
d = {k for k in stringa} # {'g', 'a', 't', 'o'}
Come la list comprehension ma mi ritorna un
Gli elementi vengono generati in modo Lazy, uno alla volta durante l'iterazione
Per cui per una lista molto grande la Generate Expression diventa molto performante
numeri = [1, 2, 3, 4, 5, 6, 7, 8, 9]
genExpr = (n*n for n in numeri if n%2 == 1)
for e in genExpr:
print(e) # 1, 9, 25, 49, 81
# Ma se provo a rieseguire il for
for e in genExpr:
print(e) # non ottengo nulla perché esaurito