Utilizzo 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:
123456789101112131415161718192021222324252627282930import 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()
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.
1234567891011121314151617181920212223import 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)
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.
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
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
Utilizzo 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:
123456789101112131415161718192021222324252627282930import 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()
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.
1234567891011121314151617181920212223import 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)
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.
Grazie per i tuoi commenti!