Python append () vs. + Operator auf Listen, warum ergeben diese unterschiedliche Ergebnisse?
Warum haben diese beiden Vorgänge (append()
resp. +
) geben unterschiedliche Ergebnisse?
>>> c = [1, 2, 3]
>>> c
[1, 2, 3]
>>> c += c
>>> c
[1, 2, 3, 1, 2, 3]
>>> c = [1, 2, 3]
>>> c.append(c)
>>> c
[1, 2, 3, [...]]
>>>
Im letzten Fall gibt es eigentlich eine unendliche Rekursion. c[-1]
und c
sind die gleichen. Warum ist es anders mit den +
Betrieb?
InformationsquelleAutor der Frage ooboo | 2010-01-07
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu erklären "warum":
Den
+
operation fügt die array Elemente des ursprünglichen Arrays. Diearray.append
Betrieb fügt das array (oder ein beliebiges Objekt) in das Ende des original-array, welches die Ergebnisse in einem Verweis auf sich selbst in diesem Punkt (daher der unendliche Rekursion).Der Unterschied hier ist, dass die operation + wirkt spezifisch, wenn Sie ein array hinzuzufügen (es ist überladen, wie andere auch, siehe in diesem Kapitel auf Sequenzen), die durch verketten der element. Die append-Methode jedoch nicht wörtlich, was Sie Fragen: append das Objekt auf der rechten Seite, geben Sie es (das array oder einem anderen Objekt), statt seine Elemente.
Eine alternative
Verwenden
extend()
wenn Sie verwenden möchten, eine Funktion, die ähnlich wie der + - operator (wie andere hier gezeigt haben). Es ist nicht klug, das Gegenteil zu tun: zu versuchen, nachzuahmen, append mit dem + - operator für Listen (siehe meine früher linkwarum).Kleine Geschichte
Für Spaß, ein wenig Geschichte: die Geburt des array-Modul in Python im Februar 1993. es mag Sie vielleicht überraschen, aber arrays wurden Hinzugefügt Weg nach Sequenzen und Listen zustande kam.
InformationsquelleAutor der Antwort Abel
append
ist das anfügen eines Elements an eine Liste. wenn Sie möchten, erweitern Sie die Liste mit der neuen Liste, die Sie verwenden müssenextend
.InformationsquelleAutor der Antwort SilentGhost
Dem Verkettungsoperator
+
ist ein binärer infix-operator, der, angewandt auf Listen, gibt eine neue Liste zurück, die alle Elemente von jedem seiner beiden Operanden. DieListe.append()
Methode ist einemutator
auflist
die hängt seine einzigeobject
argument (in deinem Beispiel die Listec
) zum Themalist
. In deinem Beispiel werden diese Ergebnisse inc
Anhängen einer Referenz auf sich selbst (daher der unendliche Rekursion).Eine alternative zu ' + ' - Verkettung
Den
Liste.verlängern()
Methode ist auch eine mutator-Methode, die verkettet seinesequence
Auseinandersetzung mit dem Themalist
. Speziell, es hängt jeweils von den Elementen dersequence
in iteration um.Nebenbei
Als Betreiber,
+
gibt das Ergebnis des Ausdrucks als neuen Wert. Ein nicht-Verkettungmutator
Methode,Liste.verlängern()
ändert das Thema-Liste in-place-und gibt nichts zurück.Arrays
Die ich Hinzugefügt habe, diese wegen der möglichen Verwirrung, die der Abel ' s Antwort oben verursachen können, durch das mischen der Diskussion von Listen, Sequenzen und arrays.
Arrays
wurden Hinzugefügt, um Python-nach-Sequenzen und Listen als effizientere Art der Speicherung von arrays von integralen Datentypen. Nicht zu verwechselnarrays
mitlists
. Sie sind nicht das gleiche.Aus der array docs:
Arrays sind Sequenz-Typen und Verhalten sich sehr ähnlich wie Listen, außer dass die Art von Objekten, die in Ihnen gespeichert ist, eingeschränkt. Der Typ ist angegeben auf Objekt erstellen Zeit, indem Sie eine Art code, der ein einzelnes Zeichen.
InformationsquelleAutor der Antwort Dave
Python Listen sind heterogen, dass die Elemente in der gleichen Liste kann jede Art von Objekt. Der Ausdruck:
c.append(c)
fügt das Objektc
was immer es sein mag, die Liste. In dem Fall macht es die Liste selbst Mitglied der Liste.Den Ausdruck
c += c
fügt zwei Listen zusammen und weist das Ergebnis der Variablenc
. Die überladene+
- operator ist definiert durch die Listen eine neue Liste erstellen, deren Inhalt der Elemente in der ersten Liste und die Elemente in der zweiten Liste.Also diese sind wirklich nur verschiedene Ausdrücke verwendet, um verschiedene Dinge tun beabsichtigt.
InformationsquelleAutor der Antwort Tendayi Mawushe
Die Methode, die Sie suchen, ist
extend()
. Aus der Python -Dokumentation:InformationsquelleAutor der Antwort Chinmay Kanchi
sollten Sie verwenden, erweitern()
weitere Infos: append vs. verlängern
InformationsquelleAutor der Antwort ghostdog74
Sehen die Dokumentation:
c.append(c)
"hängt" c zu sich als ein element. Da eine Liste ein Verweistyp ist, schafft dies eine rekursive Datenstruktur.c += c
entsprichtextend(c)
das hängt die Elemente von c c.InformationsquelleAutor der Antwort oefe