Weiß jemand, warum Pythons list.append
Funktion nicht aufgerufen list.push
wird, da es bereits eine gibt list.pop
, die das letzte Element (das bei -1 indiziert ist) entfernt und zurückgibt und die list.append
Semantik mit dieser Verwendung übereinstimmt?
265
pop
kann Elemente von überall in einer Liste herausspringen lassen.append
kann etwas nicht in die Mitte einer Liste "schieben".Antworten:
Weil "Anhängen" lange vor dem Gedanken an "Pop" existierte. Python 0.9.1 unterstützte list.append Anfang 1991. Zum Vergleich: Hier ist ein Teil einer Diskussion über comp.lang.python über das Hinzufügen von Pop im Jahr 1997. Guido schrieb:
Sie können auch sehen, dass er die Idee diskutiert, ob Push / Pop / Put / Pull bei Element [0] oder nach Element [-1] sein sollte, wo er einen Verweis auf die Liste von Icon veröffentlicht:
Mit anderen Worten, für Stapel, die direkt als Python-Listen implementiert sind, die bereits fast append () und del list [-1] unterstützen, ist es sinnvoll, dass list.pop () standardmäßig für das letzte Element funktioniert. Auch wenn andere Sprachen es anders machen.
Dies impliziert, dass die meisten Leute an eine Liste anhängen müssen, aber viel weniger haben Gelegenheit, Listen als Stapel zu behandeln, weshalb list.append so viel früher einging.
quelle
you're going to *read* code that uses the other one (...) which is more cognitive load
Erinnern an "es gibt keinen Push" führt nur zu einer kognitiven Belastung, wenn Sie Code schreiben. Wenn Sie sich daran erinnern, dass "Push ein genaues Synonym für Anhängen ist", wird die kognitive Belastung immer dann eingeführt, wenn Sie diejenige lesen, die weniger häufig verwendet wird. Unter stackoverflow.com/questions/3455488/… erfahren Sie mehr darüber, warum die Leute denken, dass Lesbarkeit oft die Schreibbarkeit übertrifftWeil es anhängt; es drückt nicht. "Anhängen" wird am Ende einer Liste hinzugefügt, "Drücken" wird an der Vorderseite hinzugefügt.
Stellen Sie sich eine Warteschlange gegen einen Stapel vor.
http://docs.python.org/tutorial/datastructures.html
Bearbeiten: Um meinen zweiten Satz genauer umzuformulieren, bedeutet "Anhängen" ganz klar, dass am Ende einer Liste etwas hinzugefügt wird , unabhängig von der zugrunde liegenden Implementierung. Wo ein neues Element hinzugefügt wird, wenn es "gepusht" wird, ist weniger klar. Wenn Sie auf einen Stapel schieben, wird etwas "oben" platziert, aber wo es tatsächlich in der zugrunde liegenden Datenstruktur hingeht, hängt vollständig von der Implementierung ab. Auf der anderen Seite bedeutet das Verschieben in eine Warteschlange, dass diese am Ende hinzugefügt wird.
quelle
push
fügt am Ende hinzu.list.pop
Semantik werdenlist.append
Elemente in die Liste verschoben, wenn sie als Stapel betrachtet werden.Weil es ein Element an eine Liste anfügt? Push wird normalerweise verwendet, wenn auf Stapel Bezug genommen wird.
quelle
Weil "Anhängen" intuitiv "am Ende der Liste hinzufügen" bedeutet. Wenn es "Push" genannt würde, wäre es unklar, ob wir Dinge am Ende oder am Anfang der Liste hinzufügen.
quelle
pop
Operation vorliegt. Dapush
undpop
in der Regel Stapeloperationen sind und zusammen gehören, sollte erwartet werden, dass sie am selben Ende der Liste ausgeführt werden.Keine offizielle Antwort (nur eine Vermutung basierend auf der Verwendung der Sprache), aber Python ermöglicht es Ihnen, Listen als Stapel zu verwenden (z. B. Abschnitt 5.1.1 des Tutorials ). Eine Liste ist jedoch immer noch zuallererst eine Liste, daher verwenden die Operationen, die beiden gemeinsam sind, Listenbegriffe (dh Anhängen) anstelle von Stapelbegriffen (dh Push). Da eine Pop-Operation in Listen nicht so häufig vorkommt (obwohl 'removeLast' hätte verwendet werden können), haben sie ein pop (), aber kein push () definiert.
quelle
Ok, persönliche Meinung hier, aber Anhängen und Vorstellen implizieren präzise Positionen in einem Satz.
Push und Pop sind wirklich Konzepte, die auf jedes Ende eines Sets angewendet werden können ... Solange Sie konsistent sind ... Aus irgendeinem Grund scheint Push () aus irgendeinem Grund auf die Vorderseite von a anzuwenden einstellen...
quelle
Zu Ihrer Information, es ist nicht besonders schwierig, eine Liste mit einer Push-Methode zu erstellen:
Ein Stapel ist ein etwas abstrakter Datentyp. Die Idee des "Drückens" und "Knallens" ist weitgehend unabhängig davon, wie der Stapel tatsächlich implementiert wird. Zum Beispiel könnten Sie theoretisch einen Stapel wie diesen implementieren (obwohl ich nicht weiß, warum Sie das tun würden):
... und ich habe keine verknüpften Listen verwendet, um einen Stapel zu implementieren.
quelle
Push ist ein definiertes Stapelverhalten . Wenn Sie A zum Stapeln (B, C, D) drücken, erhalten Sie (A, B, C, D).
Wenn Sie Python Append verwenden, sieht der resultierende Datensatz wie folgt aus (B, C, D, A).
Edit: Wow, heilige Pedanterie.
Ich würde annehmen, dass aus meinem Beispiel klar hervorgeht, welcher Teil der Liste oben und welcher Teil unten ist. Angenommen, die meisten von uns lesen hier von links nach rechts, dann befindet sich das erste Element einer Liste immer links.
quelle
Wahrscheinlich, weil die Originalversion von Python ( C Python) in C geschrieben wurde, nicht in C ++.
Die Idee, dass eine Liste gebildet wird, indem Dinge auf den Rücken von etwas geschoben werden, ist wahrscheinlich nicht so bekannt wie der Gedanke, sie anzuhängen.
quelle
Push and Pop ist in Bezug auf die Metapher eines Stapels von Tellern oder Tabletts in einer Cafeteria oder einem Buffet sinnvoll, insbesondere in Bezug auf die Art des Halters, unter dem sich eine Feder befindet, so dass sich der obere Teller befindet (mehr oder weniger ... theoretisch). an der gleichen Stelle, egal wie viele Teller darunter sind.
Wenn Sie ein Tablett entfernen, ist das Gewicht der Feder etwas geringer und der Stapel "springt" ein wenig nach oben. Wenn Sie die Platte zurücklegen, "drückt" sie den Stapel nach unten. Wenn Sie also die Liste als Stapel und das letzte Element als oben betrachten, sollten Sie nicht viel Verwirrung stiften.
quelle