Python-wachtrij:FIFO, LIFO-voorbeeld
Wat is Python Queue?
Een wachtrij is een container die gegevens bevat. De gegevens die het eerst worden ingevoerd, worden als eerste verwijderd en daarom wordt een wachtrij ook wel "First in First Out" (FIFO) genoemd. De wachtrij heeft twee uiteinden voor en achter. De items worden aan de achterkant ingevoerd en aan de voorkant verwijderd.
In deze Python-tutorial leer je:
- Wat is Python Queue?
- Hoe werkt Python Queue?
- Soorten wachtrijen in Python
- Installatie Python-wachtrij
- Beschikbare methoden in de Queue- en LifoQueue-klasse
- Voorbeeld van First In First Out-wachtrij
- Laatst in, eerst uit wachtrij Voorbeeld
- Voeg meer dan 1 item toe aan een wachtrij
- Sorteerwachtrij
- Wachtrij omkeren
Hoe werkt de Python-wachtrij?
De wachtrij kan gemakkelijk worden vergeleken met het voorbeeld uit de echte wereld:de rij mensen die in de rij staan te wachten bij de kassa, de persoon die het eerst staat krijgt het kaartje als eerste, gevolgd door de volgende persoon, enzovoort. Dezelfde logica geldt ook voor de wachtrijgegevensstructuur.
Hier is een schematische weergave van de wachtrij:
De Achter vertegenwoordigt het punt waar de items in de wachtrij worden ingevoegd. In dit voorbeeld is 7 daarvoor de waarde.
De Voorkant staat voor het punt waar de items uit de wachtrij worden verwijderd. Als u een item uit de wachtrij verwijdert, is het eerste element dat u krijgt 1, zoals weergegeven in de afbeelding.
Item 1 was de eerste die in de wachtrij werd geplaatst en tijdens het verwijderen is het de eerste die eruit komt. Vandaar dat de wachtrij FIRST IN FIRST OUT (FIFO) wordt genoemd
In een wachtrij worden de items op volgorde verwijderd en kunnen ze niet tussendoor worden verwijderd. U kunt item 5 gewoon niet willekeurig uit de wachtrij verwijderen, daarvoor moet u alle items vóór 5 verwijderen. De items in de wachtrij worden verwijderd in de volgorde waarin ze zijn ingevoegd.
Soorten wachtrijen in Python
Er zijn hoofdzakelijk twee soorten wachtrijen in Python:
- First in First out-wachtrij:hiervoor zal het element dat als eerste naar buiten gaat, als eerste naar buiten komen.
Om met FIFO te werken, moet je Queue() . aanroepen klasse uit wachtrijmodule.
- Laatste in First out-wachtrij:Hier komt het element dat als laatste wordt ingevoerd als eerste uit.
Om met LIFO te werken, moet je LifoQueue() . aanroepen klasse uit de wachtrijmodule.
Installatie Python-wachtrij
Het is heel gemakkelijk om met wachtrij in python te werken. Hier zijn de stappen die u moet volgen om gebruik te maken van de wachtrij in uw code.
Stap 1) U hoeft alleen de wachtrijmodule te importeren, zoals hieronder weergegeven:
import queue
De module is standaard beschikbaar bij python en je hebt geen extra installatie nodig om met de wachtrij aan de slag te gaan. Er zijn 2 soorten wachtrij FIFO (first in first out) en LIFO (last in first out).
Stap 2) Om met FIFO queue te werken, roept u de Queue-klasse aan met behulp van de wachtrijmodule die is geïmporteerd zoals hieronder weergegeven:
import queue q1 = queue.Queue()
Stap 3) Om met de LIFO-wachtrij te werken, roept u de klasse LifoQueue() aan zoals hieronder getoond:
import queue q1 = queue.LifoQueue()
Beschikbare methoden in de wachtrij- en LifoQueue-klasse
Hieronder volgen de belangrijke methoden die beschikbaar zijn in de Queue- en LifoQueue-klasse:
- put(item): Hierdoor wordt het item in de wachtrij geplaatst.
- get(): Hiermee krijgt u een item uit de wachtrij terug.
- leeg(): Het zal true retourneren als de wachtrij leeg is en false als er items aanwezig zijn.
- qsize(): geeft de grootte van de wachtrij terug.
- full(): geeft true terug als de wachtrij vol is, anders false.
Voorbeeld van First In First Out-wachtrij
In het geval van first-in-first-out, zal het element dat als eerste gaat, als eerste naar buiten komen.
Toevoegen en item in een wachtrij
Laten we aan een voorbeeld werken om een item in een wachtrij toe te voegen. Om met de wachtrij aan de slag te gaan, importeert u eerst de modulewachtrij, zoals in het onderstaande voorbeeld.
Om een item toe te voegen, kunt u gebruik maken van de put() methode zoals getoond in het voorbeeld:
import queue q1 = queue.Queue() q1.put(10) #this will additem 10 to the queue.
Standaard is de grootte van de wachtrij oneindig en kunt u er een willekeurig aantal items aan toevoegen. Als u de grootte van de wachtrij wilt definiëren, kunt u hetzelfde als volgt doen
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.
Uitgang:
True
De grootte van de wachtrij is nu 5 en er zijn niet meer dan 5 items nodig, en de methode q1.full() retourneert true. Als u nog meer items toevoegt, wordt de code niet verder uitgevoerd.
Een item uit de wachtrij verwijderen
Om een item uit de wachtrij te verwijderen, kunt u de methode get() gebruiken. Deze methode staat items uit de wachtrij toe wanneer ze worden aangeroepen.
Het volgende voorbeeld laat zien hoe u een item uit de wachtrij verwijdert.
import queue q1 = queue.Queue() q1.put(10) item1 = q1.get() print('The item removed from the queue is ', item1)
Uitgang:
The item removed from the queue is 10
Laatst in, eerst uit wachtrij Voorbeeld
In het geval van de laatste in de first out-wachtrij, zal het element dat als laatste is ingevoerd de eerste zijn die eruit komt.
Om met LIFO te werken, d.w.z. als laatste in de eerste wachtrij, moeten we de wachtrijmodule importeren en gebruik maken van de LifoQueue()-methode.
Toevoegen en item in een wachtrij
Hier zullen we begrijpen hoe we een item aan de LIFO-wachtrij kunnen toevoegen.
import queue q1 = queue.LifoQueue() q1.put(10)
U moet de methode put() gebruiken op LifoQueue, zoals weergegeven in het bovenstaande voorbeeld.
Een item uit de wachtrij verwijderen
Om een item uit de LIFOqueue te verwijderen kun je de get() methode gebruiken.
import queue q1 = queue.LifoQueue() q1.put(10) item1 = q1.get() print('The item removed from the LIFO queue is ', item1)
Uitvoer:
The item removed from the LIFO queue is 10
Voeg meer dan 1 item toe aan een wachtrij
In de bovenstaande voorbeelden hebben we gezien hoe u een enkel item kunt toevoegen en het item kunt verwijderen voor FIFO en LIFOqueue. Nu zullen we zien hoe u meer dan één item kunt toevoegen en ook kunt verwijderen.
Toevoegen en item in een FIFO-wachtrij
import queue q1 = queue.Queue() for i in range(20): q1.put(i) # this will additem from 0 to 20 to the queue
Verwijder een item uit de FIFO-wachtrij
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.
Uitgang:
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
Toevoegen en item in een LIFOqueue
import queue q1 = queue.LifoQueue() for i in range(20): q1.put(i) # this will additem from 0 to 20 to the queue
Verwijder een item uit de LIFOqueue
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.
Uitgang:
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
Sorteerwachtrij
Het volgende voorbeeld toont de wachtrijsortering. Het algoritme dat voor het sorteren wordt gebruikt, is bellensortering.
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()
Uitgang:
3 4 5 10 11 21
Wachtrij omkeren
Om de wachtrij om te keren, kunt u gebruik maken van een andere wachtrij en recursie.
Het volgende voorbeeld laat zien hoe de wachtrij omgekeerd kan worden.
Voorbeeld:
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()
Uitgang:
10 3 21 4 5 11
Samenvatting:
- Een wachtrij is een container die gegevens bevat. Er zijn twee soorten wachtrij, FIFO en LIFO.
- Voor een FIFO (First in First out Queue), zal het element dat als eerste gaat, het eerste zijn dat eruit komt.
- Voor een LIFO (Last in First out Queue), zal het element dat het laatst is ingevoerd het eerste zijn dat eruit komt.
- Een item in een wachtrij wordt toegevoegd met de methode put(item).
- Om een item te verwijderen, wordt get() methode gebruikt.
Python
- Python-operators
- Python-lijst
- Python-woordenboek
- Python String strip() Functie met VOORBEELD
- Python-tekenreekslengte | len() methode Voorbeeld
- Opbrengst in Python-zelfstudie:voorbeeld van generator en rendement versus rendement
- Python-teller in verzamelingen met voorbeeld
- Enumerate() Functie in Python:Loop, Tuple, String (voorbeeld)
- Python time.sleep():voeg vertraging toe aan uw code (voorbeeld)
- Python Lijst index() met Voorbeeld
- FIFO versus LIFO:verschillen, voor- en nadelen, toepassingen en meer