Kas ir Python Queue?
Rinda ir konteiners, kurā glabājas dati. Vispirms tiks noņemti dati, kas tiek ievadīti vispirms, un tāpēc rindu sauc arī par "First in First Out" (FIFO). Rindai ir divi gali priekšā un aizmugurē. Priekšmeti tiek ievadīti no aizmugures un izņemti no priekšpuses.
Šajā Python apmācībā jūs uzzināsiet:
- Kas ir Python Queue?
- Kā darbojas Python rinda?
- Rindas veidi Python
- Python rindas instalēšana
- Queue un LifoQueue klasē pieejamās metodes
- First In First Out rindas piemērs
- Pēdējās rindas piemērs rindā
- Pievienojiet rindā vairāk nekā 1 vienumu
- Kārtot rindu
- Atpakaļgaitas rinda
Kā darbojas Python rinda?
Rindu var viegli salīdzināt ar reālās pasaules piemēru - cilvēku rindu, kas gaida rindā pie biļešu kases, vispirms stāv biļete, vispirms seko nākamā un tā tālāk. Tāda pati loģika attiecas arī uz rindas datu struktūru.
Šeit ir rindas shematisks attēlojums:
Aizmugurējā apzīmē vietu, kur preces tiek ievietots rindā. Šajā piemērā 7 ir tā vērtība.
Front apzīmē vietu, kur preces no rindas tiks noņemts. Ja noņemat vienumu no rindas, pirmais iegūtais elements ir 1, kā parādīts attēlā.
1. vienums bija pirmais, kas tika ievietots rindā, un, noņemot to, tas iznāca pirmais. Tāpēc rindu sauc par FIRST IN FIRST OUT (FIFO)
Rindā vienumi tiek noņemti secībā, un tos nevar noņemt no starplaika. Jūs vienkārši nevarat nejauši izņemt 5. vienumu no rindas, lai to izdarītu, jums būs jānoņem visi priekšmeti pirms 5. Rindā esošie vienumi tiks noņemti ievietošanas secībā.
Rindas veidi Python
Python galvenokārt ir divu veidu rindas:
- First in First out Queue: Pirmkārt, pirmais iznāks pirmais elements.
Lai strādātu ar FIFO, jums jāsauc Queue () klase no rindas moduļa.
- Pēdējā rindā: Pirmās rindas rindā: Šeit būs pirmais, kas tiks ievadīts pēdējais.
Lai strādātu ar LIFO, no rindas moduļa jums jāzvana uz LifoQueue () klasi.
Python rindas instalēšana
Darbs ar rindu pitonā ir ļoti vienkāršs. Lai kodā izmantotu rindu, veiciet tālāk norādītās darbības.
1. darbība. Jums vienkārši jāimportē rindas modulis, kā parādīts zemāk:
import queue
Modulis pēc noklusējuma ir pieejams kopā ar python, un, lai sāktu strādāt ar rindu, jums nav nepieciešama papildu instalēšana. Ir divu veidu rindas: FIFO (pirmais iekšā ārā) un LIFO (pēdējais pirmajā rindā).
2. solis. Lai strādātu ar FIFO rindu, izsauciet rindu klasē, izmantojot importēto rindas moduli, kā parādīts zemāk:
import queueq1 = queue.Queue()
3. solis. Lai strādātu ar LIFO rindu, izsauciet klasi LifoQueue (), kā parādīts zemāk:
import queueq1 = queue.LifoQueue()
Queue un LifoQueue klasē pieejamās metodes
Tālāk ir norādītas svarīgās metodes, kas pieejamas Queue un LifoQueue klasēs:
- put (item): Tas ievietos vienumu rindā.
- get (): Tas atgriezīs vienumu no rindas.
- tukšs (): tā atgriezīsies patiess, ja rinda ir tukša, un nepatiesa, ja ir vienumi.
- qsize (): atgriež rindas lielumu.
- full (): atgriež vērtību true, ja rinda ir pilna, pretējā gadījumā - false.
First In First Out rindas piemērs
Gadījumā, ja pirmais iznāk pirmais, pirmais iznāks elements.
Pievienojiet un ievietojiet rindā
Strādāsim ar piemēru, lai pievienotu vienumu rindā. Lai sāktu strādāt ar rindu, vispirms importējiet moduļa rindu, kā parādīts zemāk esošajā piemērā.
Lai pievienotu vienumu, varat izmantot put () metodi, kā parādīts piemērā:
import queueq1 = queue.Queue()q1.put(10) #this will additem 10 to the queue.
Pēc noklusējuma rindas lielums ir bezgalīgs, un tajā varat pievienot jebkuru vienumu skaitu. Ja vēlaties noteikt rindas lielumu, to pašu var izdarīt šādi
import queueq1 = 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.
Izeja:
True
Tagad rindas lielums ir 5, un tas neprasīs vairāk par 5 vienumiem, un metode q1.full () atgriezīsies true. Pievienojot vēl citus vienumus, kods vairs netiks izpildīts.
Noņemiet vienumu no rindas
Lai noņemtu vienumu no rindas, varat izmantot metodi, ko sauc get (). Šī metode ļauj vienumus no rindas izsaukt.
Šajā piemērā parādīts, kā noņemt vienumu no rindas.
import queueq1 = queue.Queue()q1.put(10)item1 = q1.get()print('The item removed from the queue is ', item1)
Izeja:
The item removed from the queue is 10
Pēdējās rindas piemērs rindā
Gadījumā, ja rinda ir pēdējā rindā, pirmais iznāks elements, kas tiek ievadīts pēdējais.
Lai strādātu ar LIFO, ti, pēdējo rindu rindā, mums jāimportē rindas modulis un jāizmanto metode LifoQueue ().
Pievienojiet un ievietojiet rindā
Šeit mēs sapratīsim, kā pievienot vienumu LIFO rindai.
import queueq1 = queue.LifoQueue()q1.put(10)
LifoQueue jums jāizmanto put () metode, kā parādīts iepriekšējā piemērā.
Noņemiet vienumu no rindas
Lai noņemtu vienumu no LIFOqueue, varat izmantot get () metodi.
import queueq1 = queue.LifoQueue()q1.put(10)item1 = q1.get()print('The item removed from the LIFO queue is ', item1)
Izeja:
The item removed from the LIFO queue is 10
Pievienojiet rindā vairāk nekā 1 vienumu
Iepriekš minētajos piemēros mēs redzējām, kā pievienot vienu vienumu un noņemt vienumu FIFO un LIFOqueue. Tagad mēs redzēsim, kā pievienot vairāk nekā vienu vienumu un arī to noņemt.
Pievienojiet un ievietojiet FIFOqueue
import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Noņemiet vienumu no FIFOqueue
import queueq1 = queue.Queue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queuewhile not q1.empty():print("The value is ", q1.get()) # get() will remove the item from the queue.
Izeja:
The value is 0The value is 1The value is 2The value is 3The value is 4The value is 5The value is 6The value is 7The value is 8The value is 9The value is 10The value is 11The value is 12The value is 13The value is 14The value is 15The value is 16The value is 17The value is 18The value is 19
Pievienojiet un ievietojiet LIFOqueue
import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queue
Noņemiet vienumu no LIFOqueue
import queueq1 = queue.LifoQueue()for i in range(20):q1.put(i) # this will additem from 0 to 20 to the queuewhile not q1.empty():print("The value is ", q1.get()) # get() will remove the item from the queue.
Izeja:
The value is 19The value is 18The value is 17The value is 16The value is 15The value is 14The value is 13The value is 12The value is 11The value is 10The value is 9The value is 8The value is 7The value is 6The value is 5The value is 4The value is 3The value is 2The value is 1The value is 0
Kārtot rindu
Šajā piemērā parādīta rindu kārtošana. Kārtošanai izmantotais algoritms ir burbuļu kārtošana.
import queueq1 = queue.Queue()#Addingitems to the queueq1.put(11)q1.put(5)q1.put(4)q1.put(21)q1.put(3)q1.put(10)#using bubble sort on the queuen = q1.qsize()for i in range(n):x = q1.get() # the element is removedfor j in range(n-1):y = q1.get() # the element is removedif x> y :q1.put(y) #the smaller one is put at the start of the queueelse:q1.put(x) # the smaller one is put at the start of the queuex = y # the greater one is replaced with x and compared again with nextelementq1.put(x)while (q1.empty() == False):print(q1.queue[0], end = " ")q1.get()
Izeja:
3 4 5 10 11 21
Atpakaļgaitas rinda
Lai mainītu rindu, varat izmantot citu rindu un rekursiju.
Šis piemērs parāda, kā mainīt rindu.
Piemērs:
import queueq1 = 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 recursionq2dest.put(buffer)return q2destq2dest = queue.Queue()qReversed = reverseQueue(q1,q2dest)while (qReversed.empty() == False):print(qReversed.queue[0], end = " ")qReversed.get()
Izeja:
10 3 21 4 5 11
Kopsavilkums:
- Rinda ir konteiners, kurā glabājas dati. Ir divi rindas veidi: FIFO un LIFO.
- FIFO (First in First out Queue) pirmais iznāks pirmais.
- LIFO (Last in First out Queue) rindā pirmais, kas tiks ievadīts pēdējais.
- Vienums rindā tiek pievienots, izmantojot put (item) metodi.
- Lai noņemtu vienumu, tiek izmantota metode get ().