Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Brug af Collections-Modulet | Effektiv Anvendelse af Datastrukturer
Optimeringsteknikker i Python

bookBrug af Collections-Modulet

Selvom indbyggede datatyper og NumPy-arrays håndterer de fleste almindelige opgaver, tilbyder collections-modulet specialiserede datastrukturer designet til specifikke anvendelser. Blandt disse skiller deque (dobbelt-endekø) sig ud med betydelige ydelsesfordele i visse scenarier.

I modsætning til lister, som kræver forskydning af elementer ved indsættelse eller fjernelse fra begyndelsen, muliggør en deque effektive operationer i begge ender. Hvis du derfor ofte har behov for at tilføje eller fjerne elementer fra enten starten eller slutningen af en samling, er en deque et bedre valg.

Nu sammenlignes ydeevnen for list og deque i et praktisk scenarie:

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

I dette eksempel har vi oprettet en list og en deque, som hver indeholder 1000000 tal fra 1 til 1000000 inklusive. Som vist er indsættelse og fjernelse af elementer i begyndelsen meget hurtigere i en deque end i en list og forbliver effektiv uanset størrelsen.

Når det gælder indsættelse eller fjernelse af elementer i begyndelsen, kan både list og deque håndtere disse opgaver effektivt. Derfor giver brugen af en deque udelukkende til dette formål ofte ikke en væsentlig fordel.

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

Ydelsesresultaterne er faktisk ens for begge datastrukturer. Dog er tilføjelse til en list en smule langsommere end tilføjelse til en deque, fordi lister, som er implementeret som dynamiske arrays, undertiden skal ændre størrelse ved at allokere et større hukommelsesblok og kopiere elementerne over. I modsætning hertil undgår deque's blokbaserede struktur ændring af størrelse, hvilket gør tilføjelser konsekvent hurtigere. Denne forskel bliver dog kun mærkbar ved relativt store lister.

question mark

I hvilken af følgende situationer er en deque et bedre valg end en list?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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

bookBrug af Collections-Modulet

Stryg for at vise menuen

Selvom indbyggede datatyper og NumPy-arrays håndterer de fleste almindelige opgaver, tilbyder collections-modulet specialiserede datastrukturer designet til specifikke anvendelser. Blandt disse skiller deque (dobbelt-endekø) sig ud med betydelige ydelsesfordele i visse scenarier.

I modsætning til lister, som kræver forskydning af elementer ved indsættelse eller fjernelse fra begyndelsen, muliggør en deque effektive operationer i begge ender. Hvis du derfor ofte har behov for at tilføje eller fjerne elementer fra enten starten eller slutningen af en samling, er en deque et bedre valg.

Nu sammenlignes ydeevnen for list og deque i et praktisk scenarie:

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

I dette eksempel har vi oprettet en list og en deque, som hver indeholder 1000000 tal fra 1 til 1000000 inklusive. Som vist er indsættelse og fjernelse af elementer i begyndelsen meget hurtigere i en deque end i en list og forbliver effektiv uanset størrelsen.

Når det gælder indsættelse eller fjernelse af elementer i begyndelsen, kan både list og deque håndtere disse opgaver effektivt. Derfor giver brugen af en deque udelukkende til dette formål ofte ikke en væsentlig fordel.

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

Ydelsesresultaterne er faktisk ens for begge datastrukturer. Dog er tilføjelse til en list en smule langsommere end tilføjelse til en deque, fordi lister, som er implementeret som dynamiske arrays, undertiden skal ændre størrelse ved at allokere et større hukommelsesblok og kopiere elementerne over. I modsætning hertil undgår deque's blokbaserede struktur ændring af størrelse, hvilket gør tilføjelser konsekvent hurtigere. Denne forskel bliver dog kun mærkbar ved relativt store lister.

question mark

I hvilken af følgende situationer er en deque et bedre valg end en list?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 4
some-alt