Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Het Gebruik van de Collections-Module | Efficiënt Gebruik van Datastructuren
Optimalisatietechnieken in Python

bookHet Gebruik van de Collections-Module

Hoewel ingebouwde datatypen en NumPy-arrays de meeste standaardtaken afhandelen, biedt de collections-module gespecialiseerde datastructuren die zijn ontworpen voor specifieke toepassingen. Onder deze structuren valt deque (dubbelzijdige wachtrij) op door aanzienlijke prestatievoordelen in bepaalde scenario's.

In tegenstelling tot lijsten, waarbij elementen verschoven moeten worden bij het invoegen of verwijderen aan het begin, maakt een deque efficiënte bewerkingen aan beide uiteinden mogelijk. Wanneer het dus vaak nodig is om elementen aan het begin of einde van een collectie toe te voegen of te verwijderen, is een deque een betere keuze.

Nu volgt een vergelijking van de prestaties van list en deque in een praktische situatie:

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 dit voorbeeld hebben we een list en een deque aangemaakt, elk met 1.000.000 getallen van 1 tot en met 1.000.000. Zoals getoond is het invoegen en verwijderen van elementen aan het begin veel sneller in een deque dan in een list en blijft efficiënt ongeacht de grootte.

Voor het invoegen of verwijderen van elementen aan het begin kunnen zowel list als deque deze taken efficiënt uitvoeren. Daarom biedt het gebruik van een deque uitsluitend voor dit doel vaak geen significant voordeel.

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

De prestatieverschillen zijn inderdaad vergelijkbaar voor beide datastructuren. Echter, het toevoegen aan een list is iets trager dan het toevoegen aan een deque, omdat lijsten, geïmplementeerd als dynamische arrays, af en toe moeten resizen door een groter geheugenblok toe te wijzen en elementen te kopiëren. Daarentegen voorkomt de blokgebaseerde structuur van deque het resizen, waardoor toevoegingen consequent sneller verlopen. Dit verschil wordt echter pas merkbaar bij relatief grote lijsten.

question mark

In welke van de volgende situaties is een deque een betere keuze dan een list?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 4

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

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

bookHet Gebruik van de Collections-Module

Veeg om het menu te tonen

Hoewel ingebouwde datatypen en NumPy-arrays de meeste standaardtaken afhandelen, biedt de collections-module gespecialiseerde datastructuren die zijn ontworpen voor specifieke toepassingen. Onder deze structuren valt deque (dubbelzijdige wachtrij) op door aanzienlijke prestatievoordelen in bepaalde scenario's.

In tegenstelling tot lijsten, waarbij elementen verschoven moeten worden bij het invoegen of verwijderen aan het begin, maakt een deque efficiënte bewerkingen aan beide uiteinden mogelijk. Wanneer het dus vaak nodig is om elementen aan het begin of einde van een collectie toe te voegen of te verwijderen, is een deque een betere keuze.

Nu volgt een vergelijking van de prestaties van list en deque in een praktische situatie:

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 dit voorbeeld hebben we een list en een deque aangemaakt, elk met 1.000.000 getallen van 1 tot en met 1.000.000. Zoals getoond is het invoegen en verwijderen van elementen aan het begin veel sneller in een deque dan in een list en blijft efficiënt ongeacht de grootte.

Voor het invoegen of verwijderen van elementen aan het begin kunnen zowel list als deque deze taken efficiënt uitvoeren. Daarom biedt het gebruik van een deque uitsluitend voor dit doel vaak geen significant voordeel.

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

De prestatieverschillen zijn inderdaad vergelijkbaar voor beide datastructuren. Echter, het toevoegen aan een list is iets trager dan het toevoegen aan een deque, omdat lijsten, geïmplementeerd als dynamische arrays, af en toe moeten resizen door een groter geheugenblok toe te wijzen en elementen te kopiëren. Daarentegen voorkomt de blokgebaseerde structuur van deque het resizen, waardoor toevoegingen consequent sneller verlopen. Dit verschil wordt echter pas merkbaar bij relatief grote lijsten.

question mark

In welke van de volgende situaties is een deque een betere keuze dan een list?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 4
some-alt