SUPERCAT.DEV

Benvenut* sul mio blog

PYTHON

Richiami di Python: le * comprehension

17-11-2022

List/dict/set comprehension + Generator Expressions

LIST COMPREHENSION

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]

DICT COMPREHENSION

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}

SET COMPREHENSION

{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'}

GENERATOR EXPRESSIONS

Come la list comprehension ma mi ritorna un invece di una
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