Bevezetés
Az egyszerű egész számok tárolásától az összetett munkafolyamatok kezeléséig az adatstruktúrák megalapozzák a robusztus alkalmazások alapjait. Közülük a sorban áll gyakran érdekesnek és mindenütt jelen lévőnek tűnik. Gondolj bele – a sor a bankban, egy gyorséttermi pultnál várva a sorára vagy a feladatok pufferelésére egy számítógépes rendszerben – mindezek a forgatókönyvek összecsengenek a sor mechanikájával.
A sorban első személyt szolgálják ki először, az újonnan érkezők pedig a végén csatlakoznak. Ez egy valós példa a sor működésére!
A fejlesztők számára, különösen a Pythonban, a sorok nem csupán elméleti konstrukciók egy számítástechnikai tankönyvből. Sok alkalmazásban ezek alkotják az alapul szolgáló architektúrát. A nyomtatási sorok nélkülözhetetlen szerepet játszanak a nyomtatóban végzett feladatok kezelésétől az élő adások zökkenőmentes adatfolyamának biztosításáig.
Ebben az útmutatóban mélyen elmélyülünk a várólisták fogalmában, feltárjuk jellemzőiket, a valós alkalmazásokat, és ami a legfontosabb, hogyan lehet hatékonyan implementálni és használni őket Pythonban.
Mi az a várólista adatstruktúra?
Az adatstruktúrák táján navigálva gyakran találkozunk olyan tárolókkal, amelyeknek külön szabályai vannak az adatbevitelre és -lekérésre. Ezek közül a sorban áll eleganciájával és egyenességével tűnik ki.
A FIFO-elv
Lényegében a sor egy lineáris adatstruktúra, amely megfelel a Első-első-kimenő (FIFO) elv. Ez azt jelenti, hogy a sorhoz elsőként hozzáadott elem lesz az első, amelyet eltávolítanak. Ha egy összehasonlítható forgatókönyvhöz hasonlítjuk: vegye figyelembe a vásárlók sorát a jegypénztárnál. Az elsőként érkező személy kapja meg először a jegyét, a később érkezők pedig a végén sorakoznak, és várják a sorukat.
Jegyzet: A sornak két vége van – hátul és elöl. Az elülső oldal jelzi, hogy hol lesznek eltávolítva az elemek, a hátul pedig azt, hogy hol lesznek új elemek.
Alapvető sorműveletek
-
Sorba állítás – A cselekmény hozzáadásával egy elem a végéig (hátulsó) a sorból.
-
Sorból – A cselekmény eltávolítása egy elem a front a sorból.
-
Peek vagy Front – Sok esetben előnyös az elülső elem megfigyelése anélkül, hogy eltávolítaná. Ez a művelet éppen ezt teszi lehetővé.
-
Üres – Művelet, amely segít meghatározni, hogy a várólista tartalmaz-e elemeket. Ez kulcsfontosságú lehet olyan forgatókönyvekben, ahol a műveletek attól függnek, hogy a várólista adatok legyenek.
Jegyzet: Míg egyes sorok mérete korlátozott (korlátozott sorok), mások potenciálisan növekedhetnek, ameddig a rendszermemória lehetővé teszi (korlátlan sorok).
A várólisták egyszerűsége és egyértelmű működési szabályai ideálissá teszik őket a szoftverfejlesztés számos alkalmazásához, különösen a rendezett és szisztematikus feldolgozást igénylő forgatókönyvekben.
Az elmélet megértése azonban csak az első lépés. Ahogy haladunk előre, elmélyülünk a gyakorlati szempontokba, bemutatva, hogyan kell a várólistákot megvalósítani Pythonban.
Várólisták megvalósítása Pythonban – Listák vs. Deque vs. Queue modul
A Python gazdag szabványkönyvtárával és felhasználóbarát szintaxisával számos mechanizmust biztosít a várólisták megvalósításához és kezeléséhez. Bár mindegyik a sorkezelés alapvető célját szolgálja, megvannak a maguk árnyalatai, előnyei és potenciális buktatói. Vizsgáljuk meg az egyes megközelítéseket, illusztrálva azok mechanikáját és a legjobb felhasználási eseteket.
Jegyzet: A műveletek végrehajtása előtt mindig ellenőrizze a sor állapotát. Például a sorba állítás előtt ellenőrizze, hogy a sor üres-e a hibák elkerülése érdekében. Hasonlóképpen, a korlátos sorok esetében győződjön meg arról, hogy van hely, mielőtt sorba állítja.
Python listák használata várólisták megvalósításához
A Python beépített listáinak használata a várólisták megvalósítására intuitív és egyszerű. Nincs szükség külső könyvtárakra vagy összetett adatstruktúrákra. Ez a megközelítés azonban nem biztos, hogy hatékony nagy adatkészletek esetén. Elem eltávolítása a lista elejéről (pop(0)
) lineáris időt vesz igénybe, ami teljesítménybeli problémákat okozhat.
Jegyzet: Nagy teljesítményt igénylő vagy jelentős adatmennyiséggel foglalkozó alkalmazások esetén váltson a következőre collections.deque
az állandó időbonyolítás érdekében mind a sorbaállításnál, mind a sorkiürítésnél.
Kezdjük azzal, hogy hozzunk létre egy listát, amely megjeleníti a sorunkat:
queue = []
Az elemek sor végéhez adásának folyamata (sorba állítás) nem más, mint hozzáfűzni őket a listához:
queue.append('A')
queue.append('B')
queue.append('C')
print(queue)
Ezenkívül az elem eltávolítása a sor elejéről (sorba rendezés) egyenértékű a lista első elemének eltávolításával:
queue.pop(0)
print(queue)
<p></p> gyűjtemények.deque a Várólisták megvalósításához
Ez a megközelítés rendkívül hatékony, mint deque
segítségével valósítják meg a duplán linkelt lista. Támogatja a gyors O(1) hozzáfűzést és felbukkanást mindkét végéről. Ennek a megközelítésnek az a hátránya, hogy az némileg kevésbé intuitív kezdőknek.
Először is importáljuk a deque
tárgy a collections
modult és inicializáljuk a sorunkat:
from collections import deque queue = deque()
Most már használhatjuk a append()
metódus az elemek sorba rendezéséhez és a popleft()
módszer az elemek sorból való törlésére:
Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!
queue.append('A')
queue.append('B')
queue.append('C')
print(queue) queue.popleft()
print(queue)
A Python használata sorban áll Modul a sorok megvalósításához
A queue
A Python szabványos könyvtárának modulja speciálisabb megközelítést biztosít a sorkezeléshez, különféle felhasználási eseteket biztosítva:
- SimpleQueue – Egy alap FIFO-sor
- LifoQueue – Egy LIFO-sor, lényegében egy verem
- PriorityQueue – Az elemek a hozzájuk rendelt prioritás alapján törlődnek a sorból
Jegyzet: Válaszd a queue
modult, amelyet arra terveztek menetbiztos. Ez biztosítja, hogy a sorban végrehajtott párhuzamos műveletek ne vezessenek előre nem látható eredményekhez.
Ez a megközelítés nagyszerű, mert kifejezetten a várólista műveletekhez készült. De, hogy őszinte legyek, ez túlzás lehet az egyszerű forgatókönyveknél.
Most kezdjük el használni a queue
modult a projektünkbe történő importálással:
import queue
Mivel egy egyszerű FIFO-sort valósítunk meg, a következővel inicializáljuk SimpleQueue()
konstruktőr:
q = queue.SimpleQueue()
A sorbaállítási és -kiállítási műveletek a segítségével valósulnak meg put()
és a get()
módszerek a queue
modul:
q.put('A')
q.put('B')
q.put('C')
print(q.queue) q.get()
print(q.queue)
Jegyzet: A sorműveletek kivételeket hozhatnak létre, amelyek kezelés nélkül megzavarhatják az alkalmazás folyamatát. Ennek elkerülése érdekében csomagolja be a sorműveleteket try-except
blokkokat.
Például kezelje a queue.Empty
kivétel, ha a queue
modul:
import queue q = queue.SimpleQueue() try: item = q.get_nowait()
except queue.Empty: print("Queue is empty!")
Melyik megvalósítást válasszuk?
A Pythonban választott sormegvalósításnak meg kell felelnie az alkalmazás követelményeinek. Ha nagy mennyiségű adatot kezel, vagy optimalizált teljesítményre van szüksége, collections.deque
meggyőző választás. Azonban a többszálas alkalmazásoknál, vagy amikor a prioritások kerülnek szóba, a queue
modul robusztus megoldásokat kínál. Gyors szkriptekhez, vagy amikor éppen most kezdi, a Python listák elegendőek lehetnek, de mindig óvakodjunk a teljesítmény esetleges buktatóitól.
Jegyzet: Újra feltalálni a kereket a sorműveletek egyedi megvalósításával, amikor a Python már hatékony beépített megoldásokat kínál.
Mielőtt egyedi megoldásokat készítene, ismerkedjen meg a Python beépített ajánlataival, mint pl deque
és a queue
modul. Leggyakrabban a követelmények széles skáláját elégítik ki, időt takarítanak meg és csökkentik a lehetséges hibákat.
Merülj mélyebbre: Speciális sorfogalmak a Pythonban
Azok számára, akik megértették a várólisták alapvető mechanikáját, és szeretnének mélyebbre ásni, a Python rengeteg fejlett koncepciót és technikát kínál a várólista alapú műveletek finomításához és optimalizálásához. Fedezzünk fel néhányat ezek közül a kifinomult szempontok közül, és eszközök arzenálját kínáljuk a bonyolultabb forgatókönyvek kezelésére.
Kétvégű Queues with miről
Miközben korábban feltártuk deque
FIFO-sorként a LIFO (Last-In-First-Out) műveleteket is támogatja. Lehetővé teszi, hogy O(1) komplexitású elemeket fűzzünk hozzá vagy popoljunk fel mindkét végéről:
from collections import deque dq = deque()
dq.appendleft('A') dq.append('B') dq.pop() dq.popleft()
PriorityQueu akcióban
Egy egyszerű FIFO-sor használata, amikor a feldolgozás sorrendje prioritástól függ, hatékonysághiányhoz vagy nem kívánt eredményekhez vezethet, ezért ha az alkalmazás megköveteli, hogy bizonyos feltételek alapján bizonyos elemeket a többi előtt dolgozzanak fel, használjon egy PriorityQueue
. Ez biztosítja, hogy az elemek a beállított prioritások szerint dolgozzanak fel.
Vessen egy pillantást arra, hogyan állítjuk be a prioritásokat a sorhoz hozzáadott elemekhez. Ez megköveteli, hogy adjuk meg a sor argumentumaként a put()
módszer. A sor első elemeként a prioritást, második elemként a tényleges értéket kell tartalmaznia:
import queue pq = queue.PriorityQueue()
pq.put((2, "Task B"))
pq.put((1, "Task A")) pq.put((3, "Task C")) while not pq.empty(): _, task = pq.get() print(f"Processing: {task}")
Ezzel a következőket kapjuk:
Processing: Task A
Processing: Task B
Processing: Task C
Vegye figyelembe, hogy az elemeket a sorban tárolttól eltérő sorrendben adtuk hozzá. Ez annak köszönhető, hogy milyen prioritásokat osztottunk ki a dokumentumban put()
módszert, amikor elemeket ad hozzá a prioritási sorhoz.
Körkörös várólista megvalósítása
A körkörös sor (vagy gyűrűpuffer) olyan fejlett adatstruktúra, amelyben az utolsó elem az elsőhöz kapcsolódik, biztosítva a körkörös áramlást. deque
segítségével utánozhatja ezt a viselkedést maxlen
ingatlan:
from collections import deque circular_queue = deque(maxlen=3)
circular_queue.append(1)
circular_queue.append(2)
circular_queue.append(3) circular_queue.append(4)
print(circular_queue)
Következtetés
Az alapvető, de erőteljes várólisták a valós alkalmazások és számítási problémák széles skálájában találják meg lényegüket. Az operációs rendszerekben végzett feladatütemezéstől a nyomtatási sorkezelők adatfolyamának kezeléséig vagy a webszerver-kérelmekig a várólisták messzemenő következményekkel járnak.
A Python eszközök és könyvtárak gazdag palettáját hozza az asztalra a várólisták kezeléséhez. A gyors szkriptek egyszerű listaalapú soraitól a rendkívül hatékonyakig deque
a teljesítménykritikus alkalmazások esetében a nyelv valóban megfelel az igények széles skálájának.
- SEO által támogatott tartalom és PR terjesztés. Erősödjön még ma.
- PlatoData.Network Vertical Generative Ai. Erősítse meg magát. Hozzáférés itt.
- PlatoAiStream. Web3 Intelligence. Felerősített tudás. Hozzáférés itt.
- PlatoESG. Carbon, CleanTech, Energia, Környezet, Nap, Hulladékgazdálkodás. Hozzáférés itt.
- PlatoHealth. Biotechnológiai és klinikai vizsgálatok intelligencia. Hozzáférés itt.
- Forrás: https://stackabuse.com/guide-to-queues-in-python/
- :van
- :is
- :nem
- :ahol
- $ UP
- 1
- 11
- 13
- 17
- 20
- 7
- 8
- 9
- a
- Rólunk
- erről
- törvény
- cselekvések
- tényleges
- tulajdonképpen
- hozzáadott
- hozzáadásával
- fejlett
- előnyei
- előre
- Éber
- összehangolása
- Minden termék
- lehetővé teszi, hogy
- már
- Is
- mindig
- között
- an
- és a
- bármilyen
- Alkalmazás
- alkalmazások
- megközelítés
- építészet
- VANNAK
- érv
- érkezik
- fegyverraktár
- AS
- szempontok
- kijelölt
- At
- elkerülése érdekében
- alapján
- alapvető
- BE
- mert
- előtt
- Kezdők
- Kezdet
- viselkedés
- előnyös
- BEST
- Blocks
- határ
- mindkét
- Bring
- ütköző
- beépített
- de
- by
- TUD
- esetek
- ellát
- kiszolgál
- Okoz
- bizonyos
- jellemzők
- ellenőrizze
- választás
- A pop-art design, négy időzóna kijelzése egyszerre és méretének arányai azok az érvek, amelyek a NeXtime Time Zones-t kiváló választássá teszik. Válassza a
- világos
- gyűjtemény
- hogyan
- kényszerítő
- bonyolult
- bonyolultság
- számítási
- számítógép
- Computer Science
- koncepció
- fogalmak
- következtetés
- egyidejű
- összefüggő
- Fontolja
- állandó
- tartalmaz
- Konténerek
- Mag
- Számláló
- létrehozása
- kritériumok
- kritikus
- szokás
- Ügyfelek
- dátum
- adatbevitel
- Adatszerkezet
- adatkészletek
- foglalkozó
- mély
- mélyebb
- ás
- igényes
- függő
- tervezett
- Határozzuk meg
- fejlesztők
- Fejlesztés
- különböző
- megszakítása
- különböző
- do
- hátránya
- minden
- mohó
- hatékonyan
- hatékony
- elem
- elemek
- kiemelkedik
- végén
- vége
- biztosítására
- biztosítja
- biztosítása
- belépés
- Egyenértékű
- hibák
- különösen
- lényeg
- lényegében
- példa
- kivétel
- kifejezetten
- feltárt
- Feltárása
- külső
- ismerkedjen
- messze nyúló
- GYORS
- Találjon
- vezetéknév
- áramlási
- Összpontosít
- következő
- A
- forma
- ból ből
- front
- teljesen
- alapvető
- megy
- Ad
- Giving
- nagy
- alapozás
- Nő
- útmutató
- fogantyú
- Kezelés
- hands-on
- Legyen
- tekintettel
- segít
- Magas
- nagyon
- becsületes
- lebeg
- Hogyan
- How To
- azonban
- HTTPS
- ICON
- ideális
- if
- szemléltető
- végre
- végrehajtás
- végre
- végrehajtási
- következményei
- importál
- ami fontos
- importáló
- in
- beleértve
- jelzi
- elégtelenségek
- példa
- bele
- érdekesnek
- Bevezetés
- intuitív
- kérdések
- IT
- ITS
- csatlakozik
- éppen
- táj
- nyelv
- nagy
- keresztnév
- világi
- vezet
- tanulás
- kevesebb
- hadd
- LG
- könyvtárak
- könyvtár
- mint
- Korlátozott
- vonal
- Lista
- listák
- él
- ll
- Hosszú
- néz
- csinál
- vezetés
- kezelése
- sok
- eszközök
- mechanika
- mechanizmusok
- Memory design
- módszer
- mód
- esetleg
- Modulok
- több
- a legtöbb
- mozog
- Szükség
- igények
- Új
- nem
- semmi
- árnyalatok
- tárgy
- megfigyelni
- of
- Ajánlat
- Ajánlatok
- gyakran
- on
- ONE
- üzemeltetési
- operációs rendszer
- működés
- Művelet
- Optimalizálja
- optimalizált
- or
- érdekében
- Más
- Egyéb
- mi
- ki
- eredmények
- palettán
- elhalad
- teljesítmény
- előadó
- person
- Plató
- Platón adatintelligencia
- PlatoData
- játszani
- rengeteg
- pop
- Pops
- potenciális
- potenciálisan
- erős
- Gyakorlati
- megakadályozása
- korábban
- alapelv
- prioritás
- problémák
- folyamat
- Feldolgozott
- feldolgozás
- program
- ingatlan
- biztosít
- cél
- Piton
- Quick
- emel
- hatótávolság
- RE
- való Világ
- csökkentő
- finomítani
- eltávolított
- eltávolítása
- képvisel
- kéri
- szükség
- követelmények
- megköveteli,
- rezonátor
- Gazdag
- Gyűrű
- erős
- Szerep
- szabályok
- s
- megtakarítás
- forgatókönyv
- forgatókönyvek
- ütemezés
- Tudomány
- szkriptek
- zökkenőmentesen
- Második
- szolgál
- szolgált
- szerver
- készlet
- számos
- árnyék
- adatlap
- kellene
- jelentős
- jelzi
- Egyszerű
- egyszerűség
- helyzetek
- Méret
- So
- szoftver
- szoftverfejlesztés
- Megoldások
- néhány
- kifinomult
- Hely
- specializált
- Spektrum
- Stackabus
- standard
- szabványok
- állványok
- kezdet
- Kezdve
- Állapot
- Lépés
- megáll
- memorizált
- tárolása
- egyértelmű
- patakok
- struktúra
- struktúrák
- későbbi
- Támogatja
- SVG
- kapcsoló
- szintaxis
- rendszer
- Systems
- táblázat
- felszerelés
- tart
- Feladat
- feladatok
- technikák
- tankönyv
- mint
- hogy
- A
- A táj
- azok
- Őket
- elméleti
- elmélet
- Ott.
- Ezek
- ők
- Szerintem
- ezt
- azok
- Keresztül
- jegy
- idő
- nak nek
- szerszámok
- átmenet
- igaz
- valóban
- FORDULAT
- kettő
- mindenütt jelenlevő
- feltárni
- mögöttes
- megértés
- kiszámíthatatlan
- us
- használ
- barátságos felhasználói
- segítségével
- érték
- fajta
- különféle
- Ve
- ellenőrzése
- kötet
- vs
- Várakozás
- we
- háló
- webszerver
- Mit
- Mi
- Kerék
- amikor
- ami
- míg
- WHO
- széles
- Széleskörű
- lesz
- val vel
- nélkül
- Munka
- munkafolyamatok
- dolgozó
- betakar
- még
- te
- A te
- magad
- zephyrnet