Strings sind iterierbar: Die Elemente sind die Zeichen der Zeichenfolge. Wenn Sie einer Liste einen iterierbaren Wert hinzufügen, werden die -Elemente des Iterablen an die Liste angehängt.
Einer der folgenden Schritte wird das ausführen, was Sie erwarten (z. B. die Zeichenfolge anhängen und die Liste nicht mit den Zeichen der Zeichenfolge erweitern):
%Vor%oder
%Vor% Der Operator +=
erweitert eine Liste, anstatt sie anzuhängen:
Dies ist eine Antwort nicht auf die ursprüngliche Frage (die meiner Meinung nach ausreichend beantwortet wurde), sondern auf die zahlreichen Fragen, die in den Kommentaren zur Semantik der erweiterten Zuweisung ( +=
und ähnliche Operationen) gestellt wurden / p>
Kurz gesagt: Die erweiterte Zuweisung funktioniert bei veränderlichen Typen anders als bei unveränderlichen Typen.
str
, tuple
, und die numerischen Typen sind unter anderem unveränderlich. Der Inhalt eines Tupels kann nach der Erstellung nicht mehr geändert werden. Sie erhalten dieses Verhalten:
str
hat dieselbe Semantik. Grundsätzlich ist a += b
äquivalent zu a = a + b
, wenn a
unveränderlich ist.
Die meisten anderen Typen, einschließlich list
, sind veränderbar. Der Inhalt einer Liste kann vor Ort geändert werden, und die erweiterte Zuweisung macht genau das. Daher:
Wenn die dritte Zeile durch a = a + [3, 4]
ersetzt wurde, wurde eine neue Liste erstellt und b
wäre [1, 2]
.
Für eine benutzerdefinierte Klasse hängt die Semantik davon ab, wie sie implementiert wurde, aber so soll es pro PEP 203 gemacht werden.
Eine Zeichenfolge ist eine Zeichenfolge. Die Listenoperation +=
nimmt eine beliebige Sequenz und hängt jedes der Elemente der Sequenz an die Liste an.
(Tatsächlich nimmt +=
alle iterierbaren Werte an.)
+ = ist syntaktischer Zucker für die Erweiterung, aber + ist nur Listenverkettung. Wenn Sie erweitern, durchlaufen Sie das Argument, das in diesem Fall eine Zeichenfolge ist. Aber Sie können eine Zeichenfolge nicht mit einer Liste verketten, daher schlägt + fehl.
Im Wesentlichen wird der Operator + = in der Liste den Iterator von c abrufen, der die einzelnen Zeichen in der richtigen Reihenfolge ergibt. Wenn Sie beabsichtigen, die tatsächliche Zeichenfolge der Liste hinzuzufügen und das Ergebnis ['1234'] zu erhalten, können Sie stattdessen b.append ('1234') verwenden.