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