Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Använda Collections-Modulen | Effektiv Användning av Datastrukturer
Optimeringstekniker i Python

bookAnvända Collections-Modulen

Även om inbyggda datatyper och NumPy-arrayer hanterar de flesta vanliga uppgifter, erbjuder modulen collections specialiserade datastrukturer utformade för specifika användningsområden. Bland dessa utmärker sig deque (dubbelsidig kö) genom betydande prestandafördelar i vissa scenarier.

Till skillnad från listor, som kräver förskjutning av element vid insättning eller borttagning från början, möjliggör en deque effektiva operationer i båda ändar. Om du ofta behöver lägga till eller ta bort element från någon av ändarna i en samling är en deque ett bättre val.

Nu jämför vi prestandan mellan list och deque i ett praktiskt 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 det här exemplet har vi skapat en list och en deque, som båda innehåller 1000000 tal från 1 till 1000000 inklusive. Som visas är det mycket snabbare att infoga och ta bort element i början av en deque än i en list och förblir effektivt oavsett storlek.

När det gäller infogning eller borttagning av element i början kan både list och deque hantera dessa uppgifter effektivt. Därför ger användning av en deque enbart för detta ändamål ofta ingen betydande fördel.

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

Prestandaresultaten är faktiskt liknande för båda datastrukturerna. Dock är tillägg till en list något långsammare än tillägg till en deque, eftersom listor, som implementeras som dynamiska arrayer, ibland måste ändra storlek genom att allokera ett större minnesblock och kopiera över elementen. Däremot undviker deque denna omallokering tack vare sin blockbaserade struktur, vilket gör tillägg konsekvent snabbare. Denna skillnad blir dock märkbar först vid relativt stora listor.

question mark

I vilken av följande situationer är en deque ett bättre val än en list?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 7.69

bookAnvända Collections-Modulen

Svep för att visa menyn

Även om inbyggda datatyper och NumPy-arrayer hanterar de flesta vanliga uppgifter, erbjuder modulen collections specialiserade datastrukturer utformade för specifika användningsområden. Bland dessa utmärker sig deque (dubbelsidig kö) genom betydande prestandafördelar i vissa scenarier.

Till skillnad från listor, som kräver förskjutning av element vid insättning eller borttagning från början, möjliggör en deque effektiva operationer i båda ändar. Om du ofta behöver lägga till eller ta bort element från någon av ändarna i en samling är en deque ett bättre val.

Nu jämför vi prestandan mellan list och deque i ett praktiskt 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 det här exemplet har vi skapat en list och en deque, som båda innehåller 1000000 tal från 1 till 1000000 inklusive. Som visas är det mycket snabbare att infoga och ta bort element i början av en deque än i en list och förblir effektivt oavsett storlek.

När det gäller infogning eller borttagning av element i början kan både list och deque hantera dessa uppgifter effektivt. Därför ger användning av en deque enbart för detta ändamål ofta ingen betydande fördel.

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

Prestandaresultaten är faktiskt liknande för båda datastrukturerna. Dock är tillägg till en list något långsammare än tillägg till en deque, eftersom listor, som implementeras som dynamiska arrayer, ibland måste ändra storlek genom att allokera ett större minnesblock och kopiera över elementen. Däremot undviker deque denna omallokering tack vare sin blockbaserade struktur, vilket gör tillägg konsekvent snabbare. Denna skillnad blir dock märkbar först vid relativt stora listor.

question mark

I vilken av följande situationer är en deque ett bättre val än en list?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 4
some-alt