2016-07-21 19 views
-2

Was ist der Unterschied zwischen einer Liste & ein Stapel in Python?Unterschied zwischen einer Liste und einem Stapel in Python?

Ich habe seine Erklärung in der Python-Dokumentation gelesen, aber dort scheinen die Dinge gleich zu sein?

>>> stack = [3, 4, 5] 
>>> stack.append(6) 
>>> stack.append(7) 
>>> stack 
[3, 4, 5, 6, 7] 
>>> stack.pop() 
7 
>>> stack 
[3, 4, 5, 6] 
>>> stack.pop() 
6 
>>> stack.pop() 
5 
>>> stack 
[3, 4] 

Antwort

7

Ein Stapel ist eine Datenstruktur Konzept. Die Dokumentation verwendet ein Python list Objekt, um eins zu implementieren. Aus diesem Grund trägt dieser Abschnitt des Lernprogramms den Namen Verwenden von Listen als Stapel.

Stacks sind Dinge, denen du Sachen hinzufügst, und wenn du Sachen wieder von einem Stapel wegnimmst, tust du das in umgekehrter Reihenfolge, zuerst im, letzten im Stil. Wie ein Stapel Bücher oder Hüte oder ... Bierkästen:

beer crate stacking

Siehe Wikipedia explanation.

Listen auf der anderen Seite sind vielseitiger, Sie können Elemente überall in der Liste hinzufügen und entfernen. Du würdest das nicht mit einem Stapel Bierkisten mit jemandem oben versuchen!

Sie könnten einen Stapel mit einer benutzerdefinierten Klasse implementieren:

from collections import namedtuple 

class _Entry(namedtuple('_Entry', 'value next')): 
    def _repr_assist(self, postfix): 
     r = repr(self.value) + postfix 
     if self.next is not None: 
      return self.next._repr_assist(', ' + r) 
     return r 

class Stack(object): 
    def __init__(self): 
     self.top = None 
    def push(self, value): 
     self.top = _Entry(value, self.top) 
    def pop(self): 
     if self.top is None: 
      raise ValueError("Can't pop from an empty stack") 
     res, self.top = self.top.value, self.top.next 
     return res 
    def __repr__(self): 
     if self.top is None: return '[]' 
     return '[' + self.top._repr_assist(']') 

Kaum eine Liste in Sicht (etwas künstlich), aber es ist auf jeden Fall ein Stapel:

>>> stack = Stack() 
>>> stack.push(3) 
>>> stack.push(4) 
>>> stack.push(5) 
>>> stack 
[3, 4, 5] 
>>> stack.pop() 
5 
>>> stack.push(6) 
>>> stack 
[3, 4, 6] 
>>> stack.pop() 
6 
>>> stack.pop() 
4 
>>> stack.pop() 
3 
>>> stack 
[] 

Die Python-Standardbibliothek doesn Es gibt keinen bestimmten Stack-Datentyp. Ein list Objekt ist in Ordnung. Beschränken Sie einfach jede Verwendung auf list.append() und list.pop() (letzteres ohne Argumente), um eine Liste als einen Stapel zu behandeln.

+0

Dank @Martijn ... es ist eine große Hilfe. Obwohl einige Leute die Frage herabgesetzt haben, war ich als Anfänger verwirrt und fand Ihre Antwort äußerst hilfreich – payal

1

Ein "Stapel" ist eine spezifische Anwendung von list, mit Operationen begrenzt auf Anhängen (pushen) und knallen (ziehen) vom Ende.

0

In Python können Listen auch als Stacks verwendet werden. Stellen Sie sich eine Liste vor wie eine Kombination aus Ihren normalen Listen und einem Stapel. Dies wird auch here beschrieben

Die Liste Methoden machen es sehr einfach, eine Liste als einen Stapel verwendet werden, wobei das zuletzt hinzugefügte Element das erste Element („liest-in, first-out“) abgerufen ist, . Verwenden Sie append(), um ein Element an den Anfang des Stapels hinzuzufügen. Um abrufen ein Element aus der Oberseite des Stapels, verwendet pop() ohne expliziten Index

In dem Tun Sie ihr genaues Beispiel verwenden. Sind Sie verwirrt, dass es sich um eine "kombinierte Datenstruktur" handelt?

EDIT: wie ein anderer Benutzer erwähnt, ist es ein Konzept, das mit Listen implementiert wird.

0

Stack funktioniert im Konzept von Last in First out. Wir können Push-und Pop-Operationen im Stapel durchführen Aber vergleichen mit Stack-Liste ist einfach alle Operationen wie Hinzufügen, Einfügen, Löschen, Concat usw. zu tun ... Stack ist die Anwendung von Stack und es ist wie Datenstrukturen wir es verwenden Mehr.