Python Jono: FIFO, LIFO Esimerkki

โšก ร„lykรคs yhteenveto

Python queue on lineaarinen tietorakenne, joka tallentaa kohteita ja vapauttaa ne mรครคritellyssรค jรคrjestyksessรค. Queue-moduuli tarjoaa FIFO-, LIFO- ja prioriteettivariantit tehtรคvien hallintaan, tiedon puskurointiin ja tyรถn turvalliseen koordinointiin sรคikeiden vรคlillรค.

  • ๐Ÿ”ข FIFO: Queue-luokka poistaa vanhimman alkion ensin, mikรค on ihanteellista tehtรคvien ajoitukseen ja puskurointiin.
  • ๐Ÿ” LIFO: LifoQueue-luokka poistaa uusimman alkion ensin, kรคyttรคytyen kuin pino.
  • ๐Ÿ“ฆ Ydinmenetelmรคt: put(), get(), qsize(), empty() ja full() hallitsevat kohteita ja raportoivat jonon tilan.
  • ๐Ÿงต Sรคikeiden kestรคvรค: Jonomoduuli kรคsittelee lukituksen, joten useat sรคikeet voivat jakaa yhden jonon turvallisesti.
  • ๐ŸŽฏ Priority: PriorityQueue vapauttaa nimikkeet prioriteetin mukaan eikรค lisรคysjรคrjestyksen mukaan.
  • ๐Ÿค– Tekoรคlyn apu: Tekoรคlyavustajat luovat jonokoodia ja selittรคvรคt FIFO- ja LIFO-kompromisseja yksinkertaisella kehotteella.

Python Jono FIFO LIFO

Mikรค on Python Jonottaa?

Jono on sรคilรถ, joka sisรคltรครค tietoja. Ensin syรถtettรคvรคt tiedot poistetaan ensin, ja siksi jonoa kutsutaan myรถs nimellรค "First in First Out" (FIFO). Jonolla on kaksi pรครคtรค edessรค ja takana. Tavarat syรถtetรครคn sisรครคn takaa ja poistetaan etupuolelta.

Miten Python Jono tyรถ?

Jonoa voidaan helposti verrata tosielรคmรคn esimerkkiin lipputiskillรค jonossa odottavien ihmisten jonoon, ensimmรคisenรค seisova saa lipun ensin, sen jรคlkeen seuraava ja niin edelleen. Sama logiikka pรคtee myรถs jonotietorakenteeseen.

Tรคssรค on kaaviomainen esitys jonosta:

Python Jonotรถitรค

Takaosa edustaa kohtaa, jossa kohteet lisรคtรครคn jonoon. Tรคssรค esimerkissรค 7 on arvo sille.

Etusivu edustaa kohtaa, jossa kohteet jonosta poistetaan. Jos poistat kohteen jonosta, ensimmรคinen elementti, jonka saat, on 1, kuten kuvassa nรคkyy.

Kohde 1 oli ensimmรคinen, joka lisรคttiin jonoon, ja poistettaessa se tulee ensimmรคisenรค ulos. Tรคstรค syystรค jonoa kutsutaan FIFO (FIRST IN FIRST OUT)

Python Jonotรถitรค

Jonossa tuotteet poistetaan jรคrjestyksessรค, eikรค niitรค voi poistaa siltรค vรคliltรค. Kohdetta 5 ei vain voi poistaa satunnaisesti jonosta, vaan sinun on poistettava kaikki tuotteet ennen numeroa 5. Jonossa olevat kohteet poistetaan siinรค jรคrjestyksessรค, jossa ne on lisรคtty.

Jonon tyypit sisรครคn Python

Jonot ovat pรครคasiassa kahdenlaisia Python:

  • First in First Out Queue: Tรคtรค varten ensin lรคhtevรค elementti tulee ulos ensimmรคisenรค. Jos haluat tyรถskennellรค FIFO:n kanssa, sinun on kutsuttava Jonottaa() luokka jonomoduulista.
  • Last in First out Queue: Tรครคllรค viimeiseksi syรถtetty elementti tulee ulos ensimmรคisenรค. Jos haluat tyรถskennellรค LIFO:n kanssa, sinun on soitettava LifoQueue() luokkaa jonomoduulista.

Python jono Asennus

Pythonissa on erittรคin helppoa tyรถskennellรค jonon kanssa. Tรคssรค on ohjeita, joita sinun on noudatettava kรคyttรครคksesi jonoa koodissasi.

Vaihe 1) Sinun tarvitsee vain tuoda jonomoduuli alla olevan kuvan mukaisesti:

import queue

Moduuli on oletuksena saatavilla pythonin kanssa, etkรค tarvitse lisรคasennusta aloittaaksesi tyรถskentelyn jonon kanssa. Jonoja on kahta tyyppiรค FIFO (first in first out) ja LIFO (viimeinen sisรครคn ensin ulos).

Vaihe 2) Jos haluat tyรถskennellรค FIFO-jonon kanssa, kutsu Queue-luokka kรคyttรคmรคllรค jonomoduulia, joka on tuotu alla olevan kuvan mukaisesti:

import queue
q1 = queue.Queue()

Vaihe 3) Tyรถskentele LIFO-jonon kanssa kutsumalla LifoQueue()-luokkaa alla olevan kuvan mukaisesti:

import queue
q1 = queue.LifoQueue()

Menetelmรคt ovat kรคytettรคvissรค Queue- ja LifoQueue-luokissa

Seuraavat ovat tรคrkeรคt menetelmรคt, jotka ovat kรคytettรคvissรค Queue- ja LifoQueue-luokissa:

  • laittaa(tuote): Tรคmรค asettaa kohteen jonoon.
  • saada(): Tรคmรค palauttaa sinulle tuotteen jonosta.
  • tyhjรค(): Se palauttaa arvon tosi, jos jono on tyhjรค, ja epรคtosi, jos kohteita on.
  • qsize(): palauttaa jonon koon.
  • koko(): palauttaa arvon tosi, jos jono on tรคynnรค, muuten false.

Esimerkki First In First Out -jonosta

Jos kyseessรค on ensimmรคinen sisรครคn ensimmรคinen ulos, ensimmรคisenรค lรคhtevรค elementti tulee ulos ensimmรคisenรค.

Lisรครค ja tuote jonossa

Tyรถstetรครคn esimerkkiรค kohteen lisรครคmiseksi jonoon. Aloita tyรถskentely jonon kanssa tuomalla ensin moduulijono alla olevan esimerkin mukaisesti.

Voit lisรคtรค kohteen kรคyttรคmรคllรค put()-menetelmรครค esimerkin mukaisesti:

import queue
q1 = queue.Queue()
q1.put(10) #this will additem 10 to the queue.

Oletusarvoisesti jonon koko on รครคretรถn ja voit lisรคtรค siihen minkรค tahansa mรครคrรคn kohteita. Jos haluat mรครคrittรครค jonon koon, voit tehdรค saman seuraavasti

import queue
q1 = queue.Queue(5) #The max size is 5.
q1.put(1)
q1.put(2)
q1.put(3)
q1.put(4)
q1.put(5)
print(q1.full()) # will return true.

lรคhtรถ:

True

Nyt jonon koko on 5, eikรค se vie enempรครค kuin 5 kohdetta, ja menetelmรค q1.full() palauttaa tosi. Kohteiden lisรครคminen ei suorita koodia enรครค.

Poista kohde jonosta

Voit poistaa kohteen jonosta menetelmรคllรค get(). Tรคmรค menetelmรค sallii kohteet jonosta kutsuttaessa.

Seuraava esimerkki nรคyttรครค, kuinka kohde poistetaan jonosta.

import queue
q1 = queue.Queue()
q1.put(10)

item1 = q1.get()

print('The item removed from the queue is ', item1)

lรคhtรถ:

The item removed from the queue is  10

Esimerkki Last In First Out -jonosta

Kun kyseessรค on viimeinen ensimmรคisenรค ulos -jonossa, viimeisenรค syรถtetty elementti tulee ulos ensimmรคisenรค.

Jotta voisimme tyรถskennellรค LIFO:n kanssa, eli olla viimeisenรค ensimmรคisessรค ulostulojonossa, meidรคn on tuotava jonomoduuli ja kรคytettรคvรค LifoQueue()-menetelmรครค.

Lisรครค ja tuote jonossa

Tรครคllรค ymmรคrrรคmme kuinka lisรคtรค kohde LIFO-jonoon.

import queue
q1 = queue.LifoQueue()
q1.put(10)

Sinun on kรคytettรคvรค put()-metodia LifoQueuessa, kuten yllรค olevassa esimerkissรค nรคkyy.

Poista kohde jonosta

Voit poistaa kohteen LIFO-jonosta kรคyttรคmรคllรค get() -menetelmรครค .

import queue
q1 = queue.LifoQueue()
q1.put(10)

item1 = q1.get()

print('The item removed from the LIFO queue is ', item1)

lรคhtรถ:

The item removed from the LIFO queue is  10

Lisรครค enemmรคn kuin yksi kohde jonoon

Yllรค olevissa esimerkeissรค olemme nรคhneet kuinka lisรคtรค yksi kohde ja poistaa kohde FIFO- ja LIFOqueue-kohdissa. Nyt nรคemme kuinka lisรคtรค useampi kuin yksi kohde ja myรถs poistaa se.

Lisรครค ja kohde FIFO-jonoon

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

Poista kohde FIFO-jonosta

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

lรคhtรถ:

The value is  0
The value is  1
The value is  2
The value is  3
The value is  4
The value is  5
The value is  6
The value is  7
The value is  8
The value is  9
The value is  10
The value is  11
The value is  12
The value is  13
The value is  14
The value is  15
The value is  16
The value is  17
The value is  18
The value is  19

Lisรครค ja kohde LIFO-jonoon

import queue
q1 = queue.LifoQueue()
for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

Poista kohde LIFO-jonosta

import queue
q1 = queue.LifoQueue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

lรคhtรถ:

The value is  19
The value is  18
The value is  17
The value is  16
The value is  15
The value is  14
The value is  13
The value is  12
The value is  11
The value is  10
The value is  9
The value is  8
The value is  7
The value is  6
The value is  5
The value is  4
The value is  3
The value is  2
The value is  1
The value is  0 

Lajittelujono

Seuraava esimerkki nรคyttรครค jonojen lajittelun. Lajittelussa kรคytetty algoritmi on kuplalajittelu.

import queue
q1 = queue.Queue()
#Addingitems to the queue
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

#using bubble sort on the queue
n =  q1.qsize()
for i in range(n):
    x = q1.get() # the element is removed
    for j in range(n-1):
        y = q1.get() # the element is removed
        if x > y :  
            q1.put(y)   #the smaller one is put at the start of the queue
        else:
            q1.put(x)  # the smaller one is put at the start of the queue
            x = y     # the greater one is replaced with x and compared again with nextelement
    q1.put(x)

while (q1.empty() == False): 
print(q1.queue[0], end = " ")  
        q1.get()

lรคhtรถ:

3 4 5 10 11 21

Reversing-jono

Kรครคntรครคksesi jonon, voit kรคyttรครค toista jonoa ja rekursiota.

Seuraava esimerkki nรคyttรครค kuinka saada jono kรครคnteiseksi.

Esimerkiksi:

import queue
q1 = queue.Queue()

q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

def reverseQueue (q1src, q2dest) :  
    buffer = q1src.get()
    if (q1src.empty() == False) :
reverseQueue(q1src, q2dest)      #using recursion
    q2dest.put(buffer)
return q2dest

q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)

while (qReversed.empty() == False): 
print(qReversed.queue[0], end = " ")  
        qReversed.get()

lรคhtรถ:

10 3 21 4 5 11

UKK

Jono on FIFO, eli vanhin nimike poistuu ensin, kun taas pino on LIFO, eli uusin nimike poistuu ensin. Pythonn jonomoduuli tarjoaa Queue-ominaisuuden FIFO-kรคyttรคytymiselle ja LifoQueue-ominaisuuden pinoamiskรคyttรคytymiselle.

Kyllรค. Queue, LifoQueue ja PriorityQueue on rakennettu monisรคikeisille ohjelmille ja ne kรคsittelevรคt lukituksen sisรคisesti, joten useat tuottaja- ja kuluttajasรคikeet voivat jakaa yhden jonon ilman kilpailutilanteita tai vioittuneita tietoja.

queue.Queue on sรคikeenkestรคvรค ja suunniteltu tuottaja-kuluttaja-sรคikeitykseen. collections.deque on nopeampi yleiskรคyttรถinen kaksipรคinen jono yksisรคikeiselle koodille, joka tukee nopeita lisรคyksiรค ja poistoja molemmista pรคistรค.

PriorityQueue vapauttaa alkiot prioriteettijรคrjestyksessรค lisรคysjรคrjestyksen sijaan. Asetetaan (prioriteetti, data) -tuplet, ja get() palauttaa ensin pienimmรคn prioriteettinumeron, mikรค sopii ajoittajille ja lyhimmรคn polun algoritmeille.

Oletusarvoisesti get() estรครค ja odottaa, kunnes kohde on saatavilla. Anna block=False tai kรคytรค get_nowait()-funktiota jonon luomiseksi. Tyhjennรค poikkeus vรคlittรถmรคsti uuden kohteen odottamisen sijaan.

Anna konstruktorille maxsize-arvo, esimerkiksi queue.Queue(5). Kun jono on tรคynnรค, put() estรครค, kunnes tilaa vapautuu, ja full() palauttaa arvon True. Maxsize-arvo 0 tarkoittaa rajatonta jonoa.

Tekoรคlyavustajat luovat tuottaja-kuluttajajonokoodia, selittรคvรคt FIFO- ja LIFO-kompromisseja ja ehdottavat, sopiiko tapaukseesi queue.Queue, deque vai asyncio.Queue. Ne auttavat myรถs havaitsemaan umpikujia ja puuttuvia task_done()-kutsuja.

Kyllรค. GitHub Copilot tรคydentรครค automaattisesti jonon mรครคrityksen, put()- ja get()-silmukat sekรค tyรถsรคikeet kommentista. Agenttien tekoรคlytyรถkalut menevรคt pidemmรคlle ja muokkaavat estokoodin uudelleen asyncio.Queue-tiedostoon sekรค lisรครคvรคt virheenkรคsittelyn koko tiedostoon.

Tiivistรค tรคmรค viesti seuraavasti: