Wie andere gesagt haben, append
mutiert die Liste selbst und Sie sollten es nicht zu einer Variablen zuweisen. Ausführen es ihm die Daten ändert, effektiv jede Aktualisierung auf dem Gerät gerichtet.
Aber, gibt es einen Trick, den ich benutze, wenn ich Sachen in einer funktionalen * Art und Weise tun will, während bestehende Objekte mutiert (anstatt neue zu konstruieren, in diesem Fall mit a=[x + ['a'] for x in a]
oder speziell den x + ['a']
).
Also, wenn Sie mutig genug sind, können Sie auch dies tun:
>>> a=[[1,2],[3,4],[5,6]]
>>> a=[x.append('a') or x for x in a]
>>> a
[[1, 2, 'a'], [3, 4, 'a'], [5, 6, 'a']]
Das funktioniert, weil append
kehrt None
und die or
auf weiter für eine Wahrheit-y-Wert zu suchen, die x
ist (es ist ein list
mit mindestens was wurde angehängt).
Warum brauche ich das überhaupt?
Sagen Sie eine Liste haben, und Sie wollen einige seiner Mitglieder zu einer neuen Liste einfügen, und die Referenzen entsprechend aktualisieren:
So sehen Sie die Liste haben all
:
>>> all = [[], [], [], []]
Einige sie eingeführt und aktualisiert, um eine neue Liste x
:
>>> x = [i.append('x') or i for i in all[:2]]
>>> x
[['x'], ['x']]
Einige all
wird auch eingeführt und u pdated auf eine Liste y
:
>>> y = [i.append('y') or i for i in all[1:3]]
all
aktualisiert:
>>> all
[['x'], ['x', 'y'], ['y'], []]
Aber x
wird ebenfalls aktualisiert:
>>> x
[['x'], ['x', 'y']]
Und y
wie erwartet generiert:
>>> y
[['x', 'y'], ['y']]
Insgesamt, für einfache Aufgaben, würde ich empfehlen, eine for
Schleife explizit zu aktualisieren. Dies wird als Python angesehen.
Technisch gesehen, wenn Sie Zugriff auf die Liste Klasse hatte, konnte man dies eine Funktion machen:
def more_functional_append(self, x):
self.append(x)
return self
- functional programming basiert auf jeder Aussage im Wesentlichen eine Sache zu tun, und nicht die Nebenwirkungen (so , nicht mutierend und zurückkehrend).
append
ist nicht sehr funktional, da es eine Liste mutiert (reine funktionale Programmierung hat nur unveränderliche Objekte) und gibt kein Ergebnis an andere Aktionen (Funktionen) zurück. Mit funktionalen Programmierkonzepten können Sie große große Einzeiler erstellen, die niemand lesen kann, auch bekannt als "Job-Sicherheit" oder "schlechter Code".
Das sollte a1 sein = [Unterliste + ['a'] für Unterliste in a]. Beachten Sie die Klammern um 'a'. –
Whoops. Fest. Vielen Dank. – Oddthinking