Anvä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:
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 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.
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)
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.
Tack för dina kommentarer!
Fråga AI
Fråga AI
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
Anvä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:
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 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.
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)
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.
Tack för dina kommentarer!