Bruk 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:
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()
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.
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)
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.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
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
Bruk 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:
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()
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.
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)
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.
Takk for tilbakemeldingene dine!