Comprehension e funzioni built-in
Scriva soluzioni concise usando le comprehension di liste, dict e set, oltre a map, filter, zip, enumerate e sorted con funzioni key
Comprehension e funzioni built-in è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
List comprehension: filtraggio conciso
Una list comprehension trasforma un ciclo for con append in una sola riga ordinata: [expr for item in iterable if condition]. È leggermente più veloce e dimostra familiarità con Python.
# Traditional loop
squares = []
for n in range(1, 6):
squares.append(n * n)
print(squares) # [1, 4, 9, 16, 25]
# List comprehension
squares = [n * n for n in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# With filter
evens = [n for n in range(10) if n % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]Comprehension annidate per griglie 2D
Le comprehension annidate costruiscono griglie 2D, il modo standard per inizializzare una tabella DP. Eviti [[0]*C]*R, che condivide la stessa list interna tra tutte le righe. Il codice mostra la soluzione corretta.
# WRONG: all rows are the same object!
bad = [[0] * 3] * 3
bad[0][0] = 9
print(bad) # [[9,0,0],[9,0,0],[9,0,0]] oops!
# CORRECT: each row is a separate list
good = [[0] * 3 for _ in range(3)]
good[0][0] = 9
print(good) # [[9,0,0],[0,0,0],[0,0,0]]Dict e set comprehension
Le dict e set comprehension usano le parentesi graffe: {k: v for ...} per un dict, {expr for ...} per un set. Entrambe possono filtrare, quindi consentono di trasformare o rimuovere duplicati in una sola riga.
# Dict comprehension: square lookup
sq_map = {n: n**2 for n in range(1, 6)}
print(sq_map) # {1:1, 2:4, 3:9, 4:16, 5:25}
# Set comprehension: unique lengths
words = ['cat', 'dog', 'elephant', 'ant']
unique_lengths = {len(w) for w in words}
print(unique_lengths) # {3, 8} (order varies)Generator expression: efficienza in memoria
Racchiuda una comprehension tra () e otterrà un generatore che produce i valori uno alla volta, risparmiando memoria. Lo passi direttamente a sum, max o a qualsiasi altra funzione su sequenze enormi.
# List comprehension builds all values at once
total = sum([n**2 for n in range(1_000_000)])
# Generator yields one at a time — lower memory
total = sum(n**2 for n in range(1_000_000))
print(total) # 333332833333500000
# any/all with generators short-circuit early
nums = [4, 6, 8, 3, 10]
has_odd = any(n % 2 == 1 for n in nums)
print(has_odd) # True (stops at 3)map() e filter(): stile funzionale
map applica una funzione a ogni elemento; filter conserva quelli che superano un test. Entrambe sono lazy, quindi le racchiuda in list() per vedere i risultati. Le comprehension sono spesso più chiare.
nums = [1, 2, 3, 4, 5]
# map: apply function to each element
doubled = list(map(lambda n: n * 2, nums))
print(doubled) # [2, 4, 6, 8, 10]
# filter: keep elements passing predicate
evens = list(filter(lambda n: n % 2 == 0, nums))
print(evens) # [2, 4]
# Equivalent comprehensions (often preferred)
doubled = [n * 2 for n in nums]
evens = [n for n in nums if n % 2 == 0]zip(): abbinare sequenze
zip abbina due sequenze e si arresta al raggiungimento di quella più corta: è il modo più pulito per scorrere contemporaneamente due list. Il trucco zip(*matrix) trasforma una list 2D trasponendola. Veda il codice.
keys = ['a', 'b', 'c']
values = [1, 2, 3]
pairs = list(zip(keys, values))
print(pairs) # [('a',1), ('b',2), ('c',3)]
# Build dict from two lists
d = dict(zip(keys, values))
print(d) # {'a':1, 'b':2, 'c':3}
# Transpose a matrix
matrix = [[1,2,3],[4,5,6],[7,8,9]]
transposed = [list(row) for row in zip(*matrix)]
print(transposed) # [[1,4,7],[2,5,8],[3,6,9]]enumerate(): indice e valore
enumerate fornisce (index, value) durante l'iterazione: è più pulito di range(len(lst)) ed evita gli errori off-by-one. Usi l'opzione start per iniziare il conteggio da 1.
fruits = ['apple', 'banana', 'cherry']
# Instead of: for i in range(len(fruits)):
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple / 1 banana / 2 cherry
# Start from 1
for i, fruit in enumerate(fruits, 1):
print(f'{i}. {fruit}')
# 1. apple / 2. banana / 3. cherrysorted() con funzioni key
sorted restituisce una nuova list ordinata e accetta una funzione key per definire un ordinamento personalizzato. Ordini per lunghezza, per un campo di una tuple o senza distinzione tra maiuscole e minuscole. Il codice mostra gli ordinamenti con più chiavi.
# Sort by second element of tuple
intervals = [(1,3),(2,1),(0,5)]
print(sorted(intervals, key=lambda x: x[1]))
# [(2,1),(1,3),(0,5)]
# Sort strings case-insensitively
words = ['Banana', 'apple', 'Cherry']
print(sorted(words, key=str.lower))
# ['apple', 'Banana', 'Cherry']
# Sort by multiple keys: first by length, then alphabetically
words = ['fig', 'apple', 'ant', 'kiwi']
print(sorted(words, key=lambda w: (len(w), w)))
# ['ant', 'fig', 'kiwi', 'apple']min() e max() con key
min e max accettano anche key, quindi può ottenere con una sola chiamata l'elemento con il valore associato più piccolo o più grande, ad esempio la parola più lunga. Veda il codice.
words = ['banana', 'fig', 'strawberry', 'kiwi']
longest = max(words, key=len)
print(longest) # strawberry
shortest = min(words, key=len)
print(shortest) # fig
# Find interval with earliest end
intervals = [(2,6),(1,3),(4,5)]
earlist_end = min(intervals, key=lambda x: x[1])
print(earlist_end) # (1, 3)any() e all() per verifiche con short-circuit
any si arresta al primo elemento truthy; all si arresta al primo elemento falsy. Entrambe usano la valutazione short-circuit, quindi insieme a un generatore verificano le condizioni in modo rapido e lazy.
nums = [2, 4, 6, 7, 8]
all_even = all(n % 2 == 0 for n in nums)
print(all_even) # False (7 is odd)
has_large = any(n > 5 for n in nums)
print(has_large) # True (6 qualifies, stops there)
# Practical: check if sudoku row has no duplicates
row = [1, 2, 3, 4, 5, 6, 7, 8, 9]
valid = all(1 <= n <= 9 for n in row) and len(set(row)) == 9
print(valid) # Truesum(), abs() e divmod()
Tre funzioni di utilità matematica compaiono ovunque: sum, abs e divmod. divmod(a, b) restituisce contemporaneamente quoziente e resto: è perfetta per estrarre le cifre.
# sum with generator
print(sum(n**2 for n in range(1, 6))) # 55
# abs for distance problems
print(abs(-7)) # 7
# divmod for digit extraction
num = 1234
digits = []
while num:
num, d = divmod(num, 10)
digits.append(d)
digits.reverse()
print(digits) # [1, 2, 3, 4]Verifica rapida
Verifica rapida: vediamo come sono state recepite le comprehension e le funzioni integrate. Una domanda, ce la può fare. ✅
Riepilogo della lezione
Riepilogo: le comprehension trasformano i cicli in una riga, le funzioni integrate come zip e sorted accettano funzioni key e i generatori risparmiano memoria per le elaborazioni a passaggio singolo.
Impara Coding Interview Prep con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 90
- Lezioni
- 360
Domande Frequenti
La lezione «Comprehension e funzioni built-in» è gratuita?
Sì — il testo completo di «Comprehension e funzioni built-in» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Comprehension e funzioni built-in»?
Scriva soluzioni concise usando le comprehension di liste, dict e set, oltre a map, filter, zip, enumerate e sorted con funzioni key Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Comprehension e funzioni built-in»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?
Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Liste, tuple e slicing
- Dizionari e set in Python
- Comprehension e funzioni built-in
- Funzioni, closure e lambda