Python Kö: FIFO, LIFO Exempel

⚡ Smart sammanfattning

Python kö är en linjär datastruktur som lagrar objekt och släpper dem i en definierad ordning. Kömodulen tillhandahåller FIFO-, LIFO- och prioritetsvarianter för att hantera uppgifter, buffra data och koordinera arbete mellan trådar på ett säkert sätt.

  • 🔢 FIFO: Klassen Queue tar bort det äldsta objektet först, perfekt för uppgiftsschemaläggning och buffring.
  • 🔁 LIFO: LifoQueue-klassen tar bort det nyaste objektet först och beter sig som en stack.
  • 📦 Kärnmetoder: put(), get(), qsize(), empty() och full() hanterar objekt och rapporterar köstatus.
  • 🧵 Trådsäker: Kömodulen hanterar låsning, så flera trådar kan dela en kö säkert.
  • 🎯 Prioritet: PriorityQueue släpper objekt efter prioritet snarare än efter insättningsordning.
  • 🤖 AI-hjälp: AI-assistenter genererar kökod och förklarar FIFO- och LIFO-avvägningar från en vanlig prompt.

Python Kö FIFO LIFO

Vad är Python Kö?

En kö är en behållare som innehåller data. Den data som läggs in först kommer att tas bort först, och därför kallas en kö även för "First in First Out" (FIFO). Kön har två ändar fram och bak. Föremålen matas in från baksidan och tas bort från framsidan.

Hur fungerar Python Köjobb?

Kön kan enkelt jämföras med det verkliga exemplet, raden av människor som står i kö vid biljettdisken, den som står först får biljetten först, följt av nästa person och så vidare. Samma logik gäller även för ködatastrukturen.

Här är en schematisk representation av kön:

Python Köarbete

Ocuco-landskapet Bakre representerar punkten där objekten infogas i kön. I det här exemplet är 7 värdet för det.

Ocuco-landskapet Front representerar den punkt där objekten från kön kommer att tas bort. Om du tar bort ett föremål från kön är det första elementet du får 1, som visas i figuren.

Artikel 1 var den första som infogades i kön, och när den tas bort är den den första som kom ut. Därför kallas kön FIRST IN FIRST OUT (FIFO)

Python Köarbete

I en kö tas föremålen bort i ordning och kan inte tas bort däremellan. Du kan helt enkelt inte ta bort objekt 5 slumpmässigt från kön, för att göra det måste du ta bort alla objekt före 5. Objekten i kön kommer att tas bort i den ordning de infogas.

Typer av kö i Python

Det finns främst två typer av köer in Python:

  • Först in först ut kö: För detta kommer elementet som går först att komma ut först. För att arbeta med FIFO måste du ringa Kö() klass från kömodul.
  • Sist in först ut kö: Här borta kommer elementet som skrivs sist att vara det första som kommer ut. För att arbeta med LIFO måste du ringa LifoQueue() klass från kömodulen.

Python kö Installation

Det är väldigt enkelt att arbeta med kö i python. Här är stegen att följa för att använda kö i din kod.

Steg 1) Du behöver bara importera kömodulen, som visas nedan:

import queue

Modulen är tillgänglig som standard med python, och du behöver ingen ytterligare installation för att börja arbeta med kön. Det finns 2 typer av kö-FIFO (först in först ut) och LIFO (sist in först ut).

Steg 2) För att arbeta med FIFO-kö, anropa klassen Queue med hjälp av kömodulen som importeras enligt nedan:

import queue
q1 = queue.Queue()

Steg 3) För att arbeta med LIFO-kö, anrop klassen LifoQueue() enligt nedan:

import queue
q1 = queue.LifoQueue()

Metoder tillgängliga i klassen Queue och LifoQueue

Följande är de viktiga metoderna som finns tillgängliga i klassen Queue och LifoQueue:

  • put(item): Detta kommer att placera objektet i kön.
  • skaffa sig(): Detta kommer att returnera dig en vara från kön.
  • tömma(): Det kommer att returnera sant om kön är tom och falskt om objekt finns.
  • qsize(): returnerar storleken på kön.
  • full(): returnerar sant om kön är full, annars falskt.

Först in först ut kö Exempel

När det gäller först in först ut kommer elementet som går först att komma ut först.

Lägg till och objekt i en kö

Låt oss arbeta med ett exempel för att lägga till ett objekt i en kö. För att börja arbeta med kön, importera först modulkön, som visas i exemplet nedan.

För att lägga till ett objekt kan du använda put()-metoden som visas i exemplet:

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

Som standard är storleken på kön oändlig och du kan lägga till valfritt antal objekt till den. Om du vill definiera storleken på kön kan samma sak göras enligt följande

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.

Produktion:

True

Nu är köns storlek 5, och det tar inte mer än 5 objekt, och metoden q1.full() kommer att returnera true. Att lägga till fler objekt kommer inte att exekvera koden längre.

Ta bort ett föremål från kön

För att ta bort ett objekt från kön kan du använda metoden som heter get(). Denna metod tillåter objekt från kön när de anropas.

Följande exempel visar hur man tar bort ett objekt från kön.

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

item1 = q1.get()

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

Produktion:

The item removed from the queue is  10

Sist in först ut kö Exempel

I fallet med sist i första ut-kön kommer elementet som skrivs sist att vara det första som kommer ut.

För att arbeta med LIFO, dvs sist i först ut-kön, måste vi importera kömodulen och använda metoden LifoQueue().

Lägg till och objekt i en kö

Här kommer vi att förstå hur man lägger till ett föremål i LIFO-kön.

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

Du måste använda put()-metoden på LifoQueue, som visas i exemplet ovan.

Ta bort ett föremål från kön

För att ta bort ett objekt från LIFOqueue kan du använda metoden get() .

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

item1 = q1.get()

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

Produktion:

The item removed from the LIFO queue is  10

Lägg till mer än 1 objekt i en kö

I exemplen ovan har vi sett hur man lägger till ett enda objekt och tar bort objektet för FIFO och LIFOqueue. Nu kommer vi att se hur man lägger till mer än ett objekt och även tar bort det.

Lägg till och objekt i en FIFO-kö

import queue
q1 = queue.Queue()

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

Ta bort ett objekt från FIFO-kön

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.

Produktion:

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

Lägg till och objekt i en LIFO-kö

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

Ta bort ett föremål från LIFO-kön

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.

Produktion:

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 

Sorteringskö

Följande exempel visar kösortering. Algoritmen som används för sortering är bubbelsortering.

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()

Produktion:

3 4 5 10 11 21

Reversing kö

För att vända kön kan du använda en annan kö och rekursion.

Följande exempel visar hur man får kön omvänd.

Exempel:

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()

Produktion:

10 3 21 4 5 11

Vanliga frågor

En kö är FIFO, så det äldsta objektet lämnar först, medan en stack är LIFO, där det nyaste objektet lämnar först. Pythons kömodul erbjuder kö för FIFO-beteende och LifoQueue för stackbeteende.

Ja. Queue, LifoQueue och PriorityQueue är byggda för flertrådade program och hanterar låsning internt, så många producent- och konsumenttrådar kan dela en kö utan kappvillkor eller skadad data.

queue.Queue är trådsäker och utformad för trådning mellan producent och konsument. collections.deque är en snabbare, generell dubbelsidig kö för enkeltrådad kod, som stöder snabba tillägg och pop-ups från båda ändar.

En PriorityQueue släpper objekt i prioritetsordning istället för insättningsordning. Du placerar (priority, data) tupler, och get() returnerar det lägsta prioritetsnumret först, vilket passar schemaläggare och algoritmer för kortaste vägen.

Som standard blockerar get() och väntar tills ett objekt är tillgängligt. Skicka block=False eller använd get_nowait() för att öppna kön. Töm undantaget omedelbart istället för att vänta på ett nytt objekt.

Skicka maxsize till konstruktorn, till exempel queue.Queue(5). När kön är full, put() blockerar tills utrymme frigörs och full() returnerar True. En maxsize på 0 betyder en obegränsad kö.

AI-assistenter genererar kökod för producent och konsument, förklarar avvägningar mellan FIFO och LIFO och föreslår om queue.Queue, deque eller asyncio.Queue passar ditt fall. De hjälper också till att upptäcka låsningar och saknade task_done()-anrop.

Ja. GitHub Copilot kompletterar automatiskt kökonfiguration, put()- och get()-loopar och arbetstrådar från en kommentar. Agentics AI-verktyg går längre, omstrukturerar blockeringskod till asyncio.Queue och lägger till felhantering i en fil.

Sammanfatta detta inlägg med: