Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Utilizzo del Modulo Collections | Uso Efficiente delle Strutture Dati
Tecniche di Ottimizzazione in Python

bookUtilizzo del Modulo Collections

Sebbene i tipi di dati integrati e gli array NumPy gestiscano la maggior parte delle attività comuni, il modulo collections offre strutture dati specializzate progettate per casi d'uso specifici. Tra queste, deque (coda a doppia estremità) si distingue per i notevoli vantaggi in termini di prestazioni in determinati scenari.

A differenza delle liste, che richiedono lo spostamento degli elementi quando si inserisce o si rimuove dall'inizio, una deque consente operazioni efficienti su entrambe le estremità. Pertanto, se è necessario aggiungere o rimuovere frequentemente elementi da una delle due estremità di una collezione, una deque rappresenta una scelta migliore.

Ora, confronto delle prestazioni tra list e deque in uno scenario pratico:

123456789101112131415161718192021222324252627282930
import 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
copy

In questo esempio sono stati creati una list e una deque, ciascuna contenente 1.000.000 di numeri da 1 a 1.000.000 inclusi. Come mostrato, l'inserimento e la rimozione di elementi all'inizio risultano molto più veloci in una deque rispetto a una list e rimangono efficienti indipendentemente dalla dimensione.

Per quanto riguarda l'inserimento o la rimozione di elementi all'inizio, sia list che deque possono gestire questi compiti in modo efficiente. Pertanto, utilizzare una deque esclusivamente per questo scopo spesso non offre un vantaggio significativo.

1234567891011121314151617181920212223
import 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
copy

I risultati delle prestazioni sono effettivamente simili per entrambe le strutture dati. Tuttavia, l'aggiunta di elementi a una list è leggermente più lenta rispetto a una deque perché le liste, implementate come array dinamici, devono occasionalmente ridimensionarsi allocando un blocco di memoria più grande e copiando gli elementi. Al contrario, la struttura a blocchi di deque evita il ridimensionamento, rendendo le aggiunte costantemente più veloci. Questa differenza, tuttavia, diventa evidente solo con liste relativamente grandi.

question mark

In quale delle seguenti situazioni una deque è una scelta migliore rispetto a una list?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 4

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

What are some real-world use cases for deque?

Can you explain more about how deque is implemented internally?

When should I use a list instead of a deque?

Awesome!

Completion rate improved to 7.69

bookUtilizzo del Modulo Collections

Scorri per mostrare il menu

Sebbene i tipi di dati integrati e gli array NumPy gestiscano la maggior parte delle attività comuni, il modulo collections offre strutture dati specializzate progettate per casi d'uso specifici. Tra queste, deque (coda a doppia estremità) si distingue per i notevoli vantaggi in termini di prestazioni in determinati scenari.

A differenza delle liste, che richiedono lo spostamento degli elementi quando si inserisce o si rimuove dall'inizio, una deque consente operazioni efficienti su entrambe le estremità. Pertanto, se è necessario aggiungere o rimuovere frequentemente elementi da una delle due estremità di una collezione, una deque rappresenta una scelta migliore.

Ora, confronto delle prestazioni tra list e deque in uno scenario pratico:

123456789101112131415161718192021222324252627282930
import 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
copy

In questo esempio sono stati creati una list e una deque, ciascuna contenente 1.000.000 di numeri da 1 a 1.000.000 inclusi. Come mostrato, l'inserimento e la rimozione di elementi all'inizio risultano molto più veloci in una deque rispetto a una list e rimangono efficienti indipendentemente dalla dimensione.

Per quanto riguarda l'inserimento o la rimozione di elementi all'inizio, sia list che deque possono gestire questi compiti in modo efficiente. Pertanto, utilizzare una deque esclusivamente per questo scopo spesso non offre un vantaggio significativo.

1234567891011121314151617181920212223
import 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 from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
copy

I risultati delle prestazioni sono effettivamente simili per entrambe le strutture dati. Tuttavia, l'aggiunta di elementi a una list è leggermente più lenta rispetto a una deque perché le liste, implementate come array dinamici, devono occasionalmente ridimensionarsi allocando un blocco di memoria più grande e copiando gli elementi. Al contrario, la struttura a blocchi di deque evita il ridimensionamento, rendendo le aggiunte costantemente più veloci. Questa differenza, tuttavia, diventa evidente solo con liste relativamente grandi.

question mark

In quale delle seguenti situazioni una deque è una scelta migliore rispetto a una list?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 4
some-alt