Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Bruk av Collections-modulen | Effektiv Bruk av Datastrukturer
Optimaliseringsteknikker i Python

bookBruk av Collections-modulen

Selv om innebygde datatyper og NumPy-arrays håndterer de fleste vanlige oppgaver, tilbyr collections-modulen spesialiserte datastrukturer utviklet for bestemte bruksområder. Blant disse utmerker deque (dobbelt-endt kø) seg med betydelige ytelsesfordeler i enkelte situasjoner.

I motsetning til lister, som krever forskyvning av elementer ved innsetting eller fjerning fra begynnelsen, tillater en deque effektive operasjoner i begge ender. Hvis du ofte trenger å legge til eller fjerne elementer fra en av endene i en samling, er en deque et bedre valg.

Nå skal vi sammenligne ytelsen til list og deque i et praktisk scenario:

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 eksemplet har vi opprettet en list og en deque, hver med 1000000 tall fra 1 til og med 1000000. Som vist er det mye raskere å sette inn og fjerne elementer i begynnelsen av en deque enn i en list, og ytelsen forblir effektiv uavhengig av størrelsen.

Når det gjelder innsetting eller fjerning av elementer i begynnelsen, kan både list og deque håndtere disse oppgavene effektivt. Derfor gir det ofte ikke noen vesentlig fordel å bruke en deque kun for dette formålet.

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

Ytelsesresultatene er faktisk like for begge datastrukturene. Likevel er det litt tregere å legge til elementer i en list enn i en deque, fordi lister, som er implementert som dynamiske arrayer, av og til må endres i størrelse ved å allokere et større minneområde og kopiere elementene over. Derimot unngår deque denne omallokeringen takket være sin blokkbaserte struktur, noe som gjør innsettinger konsekvent raskere. Denne forskjellen blir imidlertid merkbar kun ved relativt store lister.

question mark

I hvilken av de følgende situasjonene er en deque et bedre valg enn en list?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 7.69

bookBruk av Collections-modulen

Sveip for å vise menyen

Selv om innebygde datatyper og NumPy-arrays håndterer de fleste vanlige oppgaver, tilbyr collections-modulen spesialiserte datastrukturer utviklet for bestemte bruksområder. Blant disse utmerker deque (dobbelt-endt kø) seg med betydelige ytelsesfordeler i enkelte situasjoner.

I motsetning til lister, som krever forskyvning av elementer ved innsetting eller fjerning fra begynnelsen, tillater en deque effektive operasjoner i begge ender. Hvis du ofte trenger å legge til eller fjerne elementer fra en av endene i en samling, er en deque et bedre valg.

Nå skal vi sammenligne ytelsen til list og deque i et praktisk scenario:

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 eksemplet har vi opprettet en list og en deque, hver med 1000000 tall fra 1 til og med 1000000. Som vist er det mye raskere å sette inn og fjerne elementer i begynnelsen av en deque enn i en list, og ytelsen forblir effektiv uavhengig av størrelsen.

Når det gjelder innsetting eller fjerning av elementer i begynnelsen, kan både list og deque håndtere disse oppgavene effektivt. Derfor gir det ofte ikke noen vesentlig fordel å bruke en deque kun for dette formålet.

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

Ytelsesresultatene er faktisk like for begge datastrukturene. Likevel er det litt tregere å legge til elementer i en list enn i en deque, fordi lister, som er implementert som dynamiske arrayer, av og til må endres i størrelse ved å allokere et større minneområde og kopiere elementene over. Derimot unngår deque denne omallokeringen takket være sin blokkbaserte struktur, noe som gjør innsettinger konsekvent raskere. Denne forskjellen blir imidlertid merkbar kun ved relativt store lister.

question mark

I hvilken av de følgende situasjonene er en deque et bedre valg enn en list?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 4
some-alt