Was ist die Ellipse [...] in einer Python-Liste?



Answers

Dies ist, was Ihr Code erstellt hat

Es ist eine Liste, in der das erste und das letzte Element auf zwei Zahlen (1 und 2) zeigen und das mittlere Element auf die Liste selbst zeigt.

Wenn in Common Lisp das Drucken von kreisförmigen Strukturen aktiviert ist, wird ein solches Objekt als gedruckt

#1=#(1 #1# 2)

Dies bedeutet, dass es ein Objekt gibt (mit 1 mit #1= ), das ein Vektor mit drei Elementen ist, das zweite ist das Objekt selbst (mit #1# referenziert).

In Python erhalten Sie nur die Information, dass die Struktur zirkulär ist mit [...] .

In diesem speziellen Fall ist die Beschreibung nicht mehrdeutig (sie zeigt rückwärts auf eine Liste, aber es gibt nur eine Liste, also muss es diese sein). In anderen Fällen kann jedoch mehrdeutig sein ... zum Beispiel in

[1, [2, [...], 3]]

Die Rückwärtsreferenz könnte entweder zur äußeren oder zur inneren Liste gehören. Diese zwei verschiedenen Strukturen, die auf die gleiche Weise gedruckt werden, können mit erstellt werden

x = [1, [2, 3]]
x[1][1:1] = [x[1]]

y = [1, [2, 3]]
y[1][1:1] = [y]

print x, y

und sie würden in Erinnerung sein als

Question

Ich habe in Python herumgespielt. Ich habe den folgenden Code in IDLE verwendet

p  = [1, 2]
p[1:1] = [p]
print p

Die Ausgabe war

[1, [...], 2]

Was ist das […]? Interessanterweise könnte ich dies jetzt als eine Liste von Listen bis unendlich verwenden, dh

p[1][1][1]....

Ich könnte so lange schreiben wie ich wollte und es würde immer noch funktionieren.

BEARBEITEN:

  • Wie ist es in der Erinnerung dargestellt?
  • Was nutzt es? Beispiele für einige Fälle, in denen es nützlich ist, wären hilfreich.
  • Jeder Link zur offiziellen Dokumentation wäre wirklich nützlich.



Das machen wir in der objektorientierten Programmierung immer. Wenn zwei Objekte sich direkt oder indirekt aufeinander beziehen, sind sie beide unendlich rekursive Strukturen (oder beide Teil derselben unendlichen rekursiven Struktur, je nachdem, wie man sie betrachtet). Das ist der Grund, warum man so etwas nicht so primitiv sieht wie eine Liste - weil wir das Konzept normalerweise besser als miteinander verbundene "Objekte" beschreiben als eine "unendliche Liste".

Sie können auch ... mit einem unendlich rekursiven Wörterbuch erhalten. Nehmen wir an, Sie möchten ein Wörterbuch der Ecken eines Dreiecks, wobei jeder Wert ein Wörterbuch der anderen Ecken ist, die mit dieser Ecke verbunden sind. Du könntest es so einrichten:

a = {}
b = {}
c = {}
triangle = {"a": a, "b": b, "c": c}
a["b"] = b
a["c"] = c
b["a"] = a
b["c"] = c
c["a"] = a
c["b"] = b

Wenn Sie nun ein triangle (oder a oder b oder c ) drucken, sehen Sie, dass es voller {...} weil sich zwei beliebige Ecken auf einander beziehen.




Der Name dieses speziellen Objekts ist die Ellipse. Ich nehme an, dass es als ein Singleton-Objekt im Python-Interpreter / VM implementiert ist - etwas wie None --- ein Sentinel von Art. Wie Sie gesehen haben, ist es für Python eine Möglichkeit, die Referenz einer Liste in sich selbst darzustellen.






Links