441 Stimmen

Ist eine Python-Liste garantiert, dass ihre Elemente in der Reihenfolge bleiben, in der sie eingefügt werden?

Wenn ich den folgenden Python-Code habe

>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]

Will x garantiert immer sein [1,2,3] oder sind andere Anordnungen der Zwischenelemente möglich?

652voto

sge Punkte 7260

Ja, die Reihenfolge der Elemente in einer Python-Liste ist beständig.

115voto

Kurzum, ja, die Reihenfolge bleibt erhalten. In lang:

Im Allgemeinen gelten die folgenden Definitionen immer für Objekte wie Listen:

A Liste ist eine Sammlung von Elementen, die doppelte Elemente enthalten kann und eine festgelegte Reihenfolge hat, die sich im Allgemeinen nicht ändert, es sei denn, sie wird ausdrücklich geändert. stapelt y Warteschlangen sind beides Arten von Listen, die ein spezifisches (oft begrenztes) Verhalten für das Hinzufügen und Entfernen von Elementen bieten (Stapel sind LIFO, Warteschlangen sind FIFO). Listen sind praktische Darstellungen von, nun ja, Listen von Dingen. Eine Zeichenkette kann man sich als eine Liste von Zeichen vorstellen, da die Reihenfolge wichtig ist ( "abc" != "bca" ) und Duplikate im Inhalt der Zeichenkette sind durchaus erlaubt ( "aaa" existieren kann und != "a" ).

A einstellen. ist eine Sammlung von Elementen, die keine Duplikate enthalten darf und eine nicht definierte Reihenfolge hat, die sich im Laufe der Zeit ändern kann oder auch nicht. Mengen stellen nicht so sehr Listen von Dingen dar, sondern sie beschreiben die Umfang einer bestimmten Auswahl von Dingen. Die interne Struktur einer Menge, d. h. die Art und Weise, wie ihre Elemente im Verhältnis zueinander gespeichert werden, ist normalerweise nicht dazu gedacht, nützliche Informationen zu vermitteln. In einigen Implementierungen sind Mengen immer intern sortiert; in anderen ist die Reihenfolge einfach undefiniert (normalerweise abhängig von einer Hash-Funktion).

Sammlung ist ein allgemeiner Begriff, der sich auf jedes Objekt bezieht, das zur Speicherung einer (in der Regel variablen) Anzahl von anderen Objekten verwendet wird. Sowohl Listen als auch Mengen sind eine Art von Sammlung. Tupel und Arrays werden normalerweise nicht als Sammlungen betrachtet. Einige Sprachen betrachten Karten (Container, die Assoziationen zwischen verschiedenen Objekten beschreiben) auch eine Art von Sammlung sein.

Dieses Benennungsschema gilt für alle Programmiersprachen, die ich kenne, einschließlich Python, C++, Java, C# und Lisp (in denen es besonders katastrophal wäre, wenn Listen ihre Reihenfolge nicht einhalten). Wenn jemand eine Sprache kennt, in der dies nicht der Fall ist, bitte ich um einen Hinweis und ich werde meine Antwort ändern. Beachten Sie, dass bestimmte Implementierungen andere Namen für diese Objekte verwenden können, wie z.B. Vektor in C++ und flex in ALGOL 68 (beide Listen; flex ist technisch gesehen nur ein Array mit veränderlicher Größe).

Wenn in Ihrem Fall noch Unklarheiten über die Art und Weise bestehen, wie die + Zeichen funktioniert hier, nur wissen, dass die Reihenfolge wichtig für Listen, und solange es keinen triftigen Grund gibt, etwas anderes anzunehmen, können Sie so gut wie immer davon ausgehen, dass Listenoperationen die Reihenfolge beibehalten. In diesem Fall ist die + Zeichen verhält sich ähnlich wie bei Zeichenketten (die ohnehin nur Listen von Zeichen sind): Es nimmt den Inhalt einer Liste und stellt ihn hinter den Inhalt einer anderen.

Wenn wir

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]

Dann

list1 + list2

Ist dasselbe wie

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]

Die Auswertung ergibt

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Ähnlich wie

"abdcde" + "fghijk"

Erzeugt

"abdcdefghijk"

10voto

Jonathan Muckell Punkte 101

Sie verwechseln "Sets" und "Listen". Eine Menge garantiert keine Ordnung, aber Listen schon.

Mengen werden mit geschweiften Klammern deklariert: {} . Im Gegensatz dazu werden Listen mit eckigen Klammern deklariert: [] .

mySet = {a, b, c, c}

Die Reihenfolge ist nicht garantiert, aber die Liste schon:

myList = [a, b, c]

5voto

asmeurer Punkte 79555

Eine Frage, die Sie vielleicht beschäftigt, ist, ob sich die Einträge ändern können, so dass z. B. aus der 2 eine andere Zahl wird. Hier können Sie beruhigt sein, denn in Python sind ganze Zahlen unveränderlich Das bedeutet, dass sie sich nach ihrer Erstellung nicht mehr ändern können.

Allerdings ist nicht alles in Python unveränderlich. Zum Beispiel sind Listen veränderbar - sie können sich nach ihrer Erstellung ändern. Wenn Sie also zum Beispiel eine Liste von Listen haben

>>> a = [[1], [2], [3]]
>>> a[0].append(7)
>>> a
[[1, 7], [2], [3]]

Hier habe ich den ersten Eintrag von a (Ich fügte hinzu 7 dazu). Man könnte sich vorstellen, dass man Dinge umherschiebt und unerwartete Ergebnisse erhält, wenn man nicht aufpasst (und in der Tat passiert das jedem, der mit der Programmierung in Python anfängt, auf die eine oder andere Weise; suchen Sie einfach auf dieser Website nach "Modifizieren einer Liste beim Durchlaufen einer Schleife", um Dutzende von Beispielen zu sehen).

Es ist auch erwähnenswert, dass x = x + [a] y x.append(a) sind nicht dasselbe. Die zweite mutiert x und der erste erstellt eine neue Liste und ordnet sie der x . Um den Unterschied zu sehen, versuchen Sie die Einstellung y = x bevor Sie etwas zu x und probieren Sie beide aus, und sehen Sie sich den Unterschied an, den die beiden für y .

2voto

pambo Punkte 21

Ja, die Liste bleibt [1,2,3], es sei denn, Sie führen eine andere Operation an ihr durch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X