Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Collections-moduulin Käyttäminen | Tietorakenteiden Tehokas Käyttö
Optimointitekniikat Pythonissa

bookCollections-moduulin Käyttäminen

Vaikka sisäänrakennetut tietotyypit ja NumPy-taulukot kattavat useimmat yleiset tehtävät, collections-moduuli tarjoaa erikoistuneita tietorakenteita tiettyihin käyttötarkoituksiin. Näistä deque (kaksipäinen jono) erottuu merkittävien suorituskykyetujensa ansiosta tietyissä tilanteissa.

Toisin kuin listat, jotka vaativat alkioiden siirtämistä lisättäessä tai poistettaessa alusta, deque mahdollistaa tehokkaat operaatiot molemmissa päissä. Jos kokoelman molemmista päistä täytyy usein lisätä tai poistaa alkioita, deque on parempi valinta.

Seuraavaksi vertaillaan list- ja deque-tietorakenteiden suorituskykyä käytännön esimerkin avulla:

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

Tässä esimerkissä on luotu list ja deque, jotka molemmat sisältävät 1 000 000 numeroa väliltä 1–1 000 000. Kuten nähdään, alkioiden lisääminen ja poistaminen alusta on huomattavasti nopeampaa deque-rakenteessa kuin list-rakenteessa ja pysyy tehokkaana koosta riippumatta.

Kun kyseessä on alkioiden lisääminen tai poistaminen alusta, sekä list että deque suoriutuvat näistä tehtävistä tehokkaasti. Siksi pelkästään tämän ominaisuuden vuoksi deque-rakenteen käyttö ei usein tarjoa merkittävää etua.

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

Suorituskykytulokset ovat todella samankaltaisia molemmille tietorakenteille. Kuitenkin alkion lisääminen list-rakenteeseen on hieman hitaampaa kuin deque-rakenteeseen, koska listat on toteutettu dynaamisina taulukoina, jotka ajoittain joutuvat muuttamaan kokoaan varaamalla suuremman muistilohkon ja kopioimalla alkiot sinne. Sen sijaan deque:n lohkopohjainen rakenne välttää koon muuttamisen, mikä tekee lisäyksistä johdonmukaisesti nopeampia. Tämä ero tulee kuitenkin esiin vain suhteellisen suurilla listoilla.

question mark

Missä seuraavista tilanteista deque on parempi valinta kuin list?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 7.69

bookCollections-moduulin Käyttäminen

Pyyhkäise näyttääksesi valikon

Vaikka sisäänrakennetut tietotyypit ja NumPy-taulukot kattavat useimmat yleiset tehtävät, collections-moduuli tarjoaa erikoistuneita tietorakenteita tiettyihin käyttötarkoituksiin. Näistä deque (kaksipäinen jono) erottuu merkittävien suorituskykyetujensa ansiosta tietyissä tilanteissa.

Toisin kuin listat, jotka vaativat alkioiden siirtämistä lisättäessä tai poistettaessa alusta, deque mahdollistaa tehokkaat operaatiot molemmissa päissä. Jos kokoelman molemmista päistä täytyy usein lisätä tai poistaa alkioita, deque on parempi valinta.

Seuraavaksi vertaillaan list- ja deque-tietorakenteiden suorituskykyä käytännön esimerkin avulla:

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

Tässä esimerkissä on luotu list ja deque, jotka molemmat sisältävät 1 000 000 numeroa väliltä 1–1 000 000. Kuten nähdään, alkioiden lisääminen ja poistaminen alusta on huomattavasti nopeampaa deque-rakenteessa kuin list-rakenteessa ja pysyy tehokkaana koosta riippumatta.

Kun kyseessä on alkioiden lisääminen tai poistaminen alusta, sekä list että deque suoriutuvat näistä tehtävistä tehokkaasti. Siksi pelkästään tämän ominaisuuden vuoksi deque-rakenteen käyttö ei usein tarjoa merkittävää etua.

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

Suorituskykytulokset ovat todella samankaltaisia molemmille tietorakenteille. Kuitenkin alkion lisääminen list-rakenteeseen on hieman hitaampaa kuin deque-rakenteeseen, koska listat on toteutettu dynaamisina taulukoina, jotka ajoittain joutuvat muuttamaan kokoaan varaamalla suuremman muistilohkon ja kopioimalla alkiot sinne. Sen sijaan deque:n lohkopohjainen rakenne välttää koon muuttamisen, mikä tekee lisäyksistä johdonmukaisesti nopeampia. Tämä ero tulee kuitenkin esiin vain suhteellisen suurilla listoilla.

question mark

Missä seuraavista tilanteista deque on parempi valinta kuin list?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 4
some-alt