Stapel und Warteschlange in Python

Dieses Mal habe ich die Kapitel 1 bis 9 des Python-Tutorials online gelesen, und es schien, dass Stack und Queue etwas tun könnten, also habe ich den Code geschrieben. Stack: Ein anderer Name für Stack ist LIFO (Last In First Out), aber wie der Name schon sagt, ist es die erste Datenstruktur, die ausgegeben wird, wenn das letzte Element ausgegeben wird. Zum Implementieren eines Stapels sind zwei Funktionen erforderlich: push (), mit dem ein Element am Ende des Stapels platziert wird, und pop (), mit dem ein Element am Ende des Stapels platziert wird. Als Bild sollten Sie beim Stapeln von Büchern denken, dass Sie von der Oberseite der gestapelten Bücher aufheben. Das Modul sieht so aus und ich werde die Erklärung später schreiben.

stack.py


class Stack:
    def __init__(self, stack = None):
        if type(stack) is type([]):
            self.stack = stack
        elif stack is None:
            self.stack = []
        else:
            print '\nError Message:\n\tYour input is not type of list!\n\tPlease enter list type!\n'
        
    def push(self, e):
        self.stack.append(e)    
        return self.stack       
        
    def pop(self):
        try:
            sEl = self.stack.pop()
            return (sEl, self.stack)  
        except IndexError:            
            print '\nError Message:\n\tThere is no element in the stack!\n'

Zuerst habe ich eine Klasse für Stack erstellt, und im Konstruktor verwendet Stack eine Liste als Parameter (Argument). In Python scheint es aus irgendeinem Grund self in den ersten Parameter des Konstruktors zu setzen, aber wenn ich mir die nächste Zeile anschaue, heißt es self.stack. Vielleicht ist das in Java so. Ich habe das Gefühl, dass ich dies in Java verwendet habe, um festzustellen, ob die Variable, auf die ich zugreifen möchte, lokal oder global definiert ist. (Vielleicht habe ich w absolut vergessen.) Im Fall von Python denke ich, dass es möglich ist, zwischen dem Stapel von Parametervariablennamen und dem Stapel von Variablen zu unterscheiden, die in dieser Klasse neu definiert wurden. push(): Durch Drücken der ersten Funktion wird das Element nur am Ende eingefügt. Rufen Sie daher einfach das Anhängen der integrierten Funktion in der Liste auf, indem Sie das e des Elements als Parameter angeben. Nur für den Fall, dass der Stapel als Rückgabewert zurückgegeben wird, damit Sie drucken können, wie sich der Stapel geändert hat. Sie sollten dies mit print sehen können, wenn Sie diese Funktion aufrufen. pop(): Auch hier können Sie das Kopfelement abrufen und entfernen, indem Sie einfach die integrierte Funktion pop () verwenden. Weisen Sie es der neuen Variablen sEl (steht für stackElement) zu und geben Sie es als Rückgabewert zurück. Im Rückgabewert wollte ich den Stapel selbst zurückgeben, um zu überprüfen, ob sich die Stapelkonfiguration geändert hat. Deshalb lege ich ihn in einen Taple und gebe die beiden Werte gleichzeitig zurück. Wenn diese Funktion aufgerufen wird, wenn der Stapel keine Elemente enthält, tritt IndexError auf. Wenn also beim Versuch ein Fehler auftritt, wird die Meldung nach dem Drucken als Warnung ausgegeben. try wird verwendet, um den Code im Inneren auszuführen. Wenn es ein Problem gibt, fangen Sie es im nächsten Block ab und geben Sie eine Nachricht aus. Dies wird auch in Java für Try & Catch verwendet. Wenn Sie also von nun an Java lernen möchten, denken Sie bitte daran.

Queue Wenn Sie in der Warteschlange ein Element einfügen, wird derselbe Vorgang wie beim Stapeln ausgeführt. Wenn Sie jedoch ein Element löschen, beginnt es mit dem Element, das als erstes der verbleibenden Elemente eingefügt wurde. Dies wird als FIFO (First In First Out) bezeichnet. Wir werden zwei Funktionen auf die gleiche Weise wie Stack erstellen. Zuerst habe ich die Funktion, die als enqueue () eingegeben werden soll, und die Funktion, die als dequeue () ausgegeben werden soll, benannt. Das Bild dieser Datenstruktur ist möglicherweise leichter zu verstehen, wenn Sie daran denken, Billardkugeln in einer Reihe anzuordnen, sie am Ende sofort herauszuschieben und von Anfang an in Löcher zu werfen.

queue.py


class Queue:
    def __init__(self, queue = None):
        if type(queue) is type([]):
            self.queue = queue
        elif queue is None:
            self.queue = []
        else:
            print '\nError Message:\n\tYour input is not type of list!\n\tPlease enter list type!\n'
        
    def enqueue(self, e):
        self.queue.append(e)   
        return self.queue     

    def dequeue(self):
        try:
            qEl = self.queue[0]     
            del self.queue[0]     
            return (qEl, self.queue)  
        except IndexError: 
            print '\nError Message:\n\tThere is no element in the queue!\n'

dequeue(): In enqueu () habe ich das gleiche Verfahren wie push () von Stack angewendet, aber in dequeue () möchte ich das zuerst eingegebene Element abrufen, also ordne ich das Element in Index 0 einer neuen Variablen zu und lösche es dann. .. Durch Löschen mit del wird das von Index 1 in der Liste gehaltene Element automatisch auf Index 0 verschoben, sodass das älteste Element in der Liste auch bei Wiederholung ausgewählt wird. Wie bei pop () wird auch hier eine try-Anweisung verwendet, um einen Fehler anzuzeigen, wenn die Liste keine Elemente enthält, und im Fehlerfall wird eine Meldung angezeigt.

In diesem Beitrag habe ich eine einfache Datenstruktur implementiert, da ich in Python fast ein Anfänger bin. Ich würde gerne das Python-Nachschlagewerk etwas mehr lesen und einen Algorithmus codieren, der für die Verarbeitung natürlicher Sprache usw. geeignet ist, aber ich denke, dass es noch viele Dinge gibt, von denen ich nicht weiß, was ich tun soll, also werde ich vielleicht eine andere Datenstruktur erstellen Ich kann es posten. Wenn es nach dem Lesen des Nachschlagewerks interessante Funktionen von Python gibt, werde ich sie alle zusammen veröffentlichen. Bis bald!

Hinweis: Der Code in diesem Beitrag war nur ein einfacher Test und funktioniert möglicherweise nicht. Wenn Sie es selbst verwenden und Probleme haben, werde ich es beheben und bearbeiten. Wenn Sie diesen Code verwenden oder ihn gelesen haben, teilen Sie uns bitte in den Kommentaren oder in der E-Mail mit, ob etwas fehlt oder wie Sie dies effizient tun können.

Recommended Posts

Stapel und Warteschlange in Python
Warteschlangen- und Python-Implementierungsmodul "deque"
Unittest und CI in Python
Unterschied zwischen list () und [] in Python
Unterschied zwischen == und ist in Python
Bearbeiten Sie Dateien und Ordner in Python
Zuweisungen und Änderungen in Python-Objekten
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Funktionssynthese und Anwendung in Python
Ich habe die Warteschlange in Python geschrieben
Exportieren und Ausgeben von Dateien in Python
Reverse Flat Pseudonym und Katakana in Python2.7
Lesen und Schreiben von Text in Python
[GUI in Python] PyQt5-Menü und Symbolleiste-
Suche nach Tiefenpriorität mit Stack in Python
Ich habe den Stack in Python geschrieben
Erstellen und lesen Sie Messagepacks in Python
Überlappende reguläre Ausdrücke in Python und Java
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Unterschied in der Authentizität zwischen Python und JavaScript
Metaprogrammierung mit Python
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Ali-Buch in Python: Selbstimplementierung der Prioritätswarteschlange
Module und Pakete in Python sind "Namespaces"
Vermeiden Sie verschachtelte Schleifen in PHP und Python
Unterschiede zwischen Ruby und Python im Umfang
AM-Modulation und Demodulation mit Python Part 2
Metaanalyse in Python
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Echte Werte und Eigenvektoren: Lineare Algebra in Python <7>
Unittest in Python
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Implementieren Sie den FIR-Filter in Python und C.
Unterschiede zwischen Python- und Java-Syntax
Überprüfen und empfangen Sie die serielle Schnittstelle in Python (Portprüfung)
Suchen und spielen Sie YouTube-Videos mit Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Schreiben Sie die O_SYNC-Datei in C und Python
N-Gramm in Python
Programmieren mit Python
Umgang mit "Jahren und Monaten" in Python
Plink in Python
Konstante in Python
Lesen und schreiben Sie JSON-Dateien mit Python
Zeichnen Sie Daten einfach in Shell und Python
Private Methoden und Felder in Python [Verschlüsselung]
Suchen und überprüfen Sie die inverse Matrix in Python