Utilizzo di map() e Comprensioni di Lista
Quando possibile, è preferibile affidarsi a funzioni, metodi o funzioni di libreria integrate piuttosto che creare algoritmi da zero. Le funzioni integrate e di libreria sono generalmente ottimizzate per le prestazioni, eseguono in modo più efficiente e sono progettate per gestire efficacemente una vasta gamma di casi limite.
Iniziamo con strumenti potenti come la funzione map() e le list comprehensions, che possono accelerare notevolmente il tuo codice. Poiché le list comprehensions sono più ottimizzate per le prestazioni e map() è implementata in C, generalmente vengono eseguite più velocemente rispetto ai cicli scritti manualmente.
List Comprehensions
Le list comprehensions offrono un modo più conciso e spesso più veloce per creare liste rispetto ai tradizionali cicli for. Inoltre, possono rendere il codice più leggibile e comprensibile.
Confrontiamo le prestazioni di un ciclo for e di una list comprehension generando una lista in cui ogni numero da 1 a 10000000 viene moltiplicato per 2:
123456789101112131415161718192021import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
Utilizzo di map()
La funzione map applica una funzione specificata a ogni elemento di un iterabile (ad esempio, una lista).
Oltre a essere più concisa rispetto alla scrittura di cicli, spesso è più veloce grazie alle ottimizzazioni a livello C nella sua implementazione, che riducono l'overhead delle chiamate ripetute di funzione.
Sebbene map possa offrire alcuni vantaggi in termini di prestazioni, specialmente quando si lavora con funzioni integrate, la differenza di velocità rispetto alle list comprehension è spesso trascurabile. Entrambi sono altamente ottimizzati e, per operazioni semplici, il vantaggio prestazionale di map è appena percettibile. In pratica, la scelta tra i due dovrebbe basarsi maggiormente sulla leggibilità e su casi d'uso specifici, come l'efficienza della memoria con map.
Confrontiamo le prestazioni di map, dei cicli for e delle list comprehension quando si formatta 1000000 nomi di clienti in formato titolo (ad esempio, 'john doe' -> 'John Doe'):
1234567891011121314151617181920212223242526import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
Come previsto, il ciclo for è l'approccio più lento tra i tre. In questo esempio, map si è rivelato più veloce della list comprehension, anche se nella pratica le prestazioni possono variare a seconda del caso d'uso specifico. Talvolta, le list comprehension possono persino superare map, soprattutto per espressioni più semplici.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain how the timeit_decorator works in these examples?
What are the main advantages of using map over list comprehensions?
When should I choose a for loop instead of map or list comprehensions?
Awesome!
Completion rate improved to 7.69
Utilizzo di map() e Comprensioni di Lista
Scorri per mostrare il menu
Quando possibile, è preferibile affidarsi a funzioni, metodi o funzioni di libreria integrate piuttosto che creare algoritmi da zero. Le funzioni integrate e di libreria sono generalmente ottimizzate per le prestazioni, eseguono in modo più efficiente e sono progettate per gestire efficacemente una vasta gamma di casi limite.
Iniziamo con strumenti potenti come la funzione map() e le list comprehensions, che possono accelerare notevolmente il tuo codice. Poiché le list comprehensions sono più ottimizzate per le prestazioni e map() è implementata in C, generalmente vengono eseguite più velocemente rispetto ai cicli scritti manualmente.
List Comprehensions
Le list comprehensions offrono un modo più conciso e spesso più veloce per creare liste rispetto ai tradizionali cicli for. Inoltre, possono rendere il codice più leggibile e comprensibile.
Confrontiamo le prestazioni di un ciclo for e di una list comprehension generando una lista in cui ogni numero da 1 a 10000000 viene moltiplicato per 2:
123456789101112131415161718192021import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
Utilizzo di map()
La funzione map applica una funzione specificata a ogni elemento di un iterabile (ad esempio, una lista).
Oltre a essere più concisa rispetto alla scrittura di cicli, spesso è più veloce grazie alle ottimizzazioni a livello C nella sua implementazione, che riducono l'overhead delle chiamate ripetute di funzione.
Sebbene map possa offrire alcuni vantaggi in termini di prestazioni, specialmente quando si lavora con funzioni integrate, la differenza di velocità rispetto alle list comprehension è spesso trascurabile. Entrambi sono altamente ottimizzati e, per operazioni semplici, il vantaggio prestazionale di map è appena percettibile. In pratica, la scelta tra i due dovrebbe basarsi maggiormente sulla leggibilità e su casi d'uso specifici, come l'efficienza della memoria con map.
Confrontiamo le prestazioni di map, dei cicli for e delle list comprehension quando si formatta 1000000 nomi di clienti in formato titolo (ad esempio, 'john doe' -> 'John Doe'):
1234567891011121314151617181920212223242526import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
Come previsto, il ciclo for è l'approccio più lento tra i tre. In questo esempio, map si è rivelato più veloce della list comprehension, anche se nella pratica le prestazioni possono variare a seconda del caso d'uso specifico. Talvolta, le list comprehension possono persino superare map, soprattutto per espressioni più semplici.
Grazie per i tuoi commenti!