Die Methoden append() und extend() von Listen in Python dienen zum Hinzufügen von Elementen, tun dies jedoch grundlegend unterschiedlich:
append(obj) fügt ein einzelnes Element (irgendein Objekt – einschließlich einer Liste) am Ende der ursprünglichen Liste hinzuextend(iterable) fügt alle Elemente des iterierbaren Objekts nacheinander hinzu (sozusagen "entfaltet" es bei der Hinzufügung)Beispiel:
lst = [1, 2, 3] lst.append([4, 5]) # Ergebnis: [1, 2, 3, [4, 5]] lst = [1, 2, 3] lst.extend([4, 5]) # Ergebnis: [1, 2, 3, 4, 5]
Dieser Unterschied führt oft zu logischen Fehlern, wenn man eine "flache" Liste erwartet und eine verschachtelte erhält.
Was passiert, wenn man
list1 = [1, 2]; list2 = [3, 4]; list1.append(list2)macht? Wie sieht list1 aus? Wie unterscheidet sich das vonlist1.extend(list2)?
Antwort:
list1.append(list2) ist das Ergebnis: [1, 2, [3, 4]] – die zweite Liste wurde als ein Element (verschachtelte Liste) hinzugefügtlist1.extend(list2) ist das Ergebnis: [1, 2, 3, 4] – die Elemente der zweiten Liste wurden "entfaltet" und als separate Elemente hinzugefügtGeschichte
Ein Entwickler fügte bei der Zusammenführung der Parsing-Ergebnisse aus mehreren Dateien
output.append(parsed_lines)hinzu. Infolgedessen erhielt er anstelle einer langen flachen Liste eine Liste von Listen (ein Element für jede Datei), was die gesamte weitere Verarbeitung störte – insbesondere Funktionen, die eine Sequenz von Zeichenfolgen erwarteten, begannen, Fehler mit den Eingabedaten auszugeben.
Geschichte
Im Projekt wurde extend verwendet, um eine Zeichenfolge wie "foo" hinzuzufügen (dh die Zeichenfolge wurde als iterierbar betrachtet). Dies führte dazu, dass die Zeichen der Zeichenfolge separate Elemente der Liste wurden:
['f', 'o', 'o']anstelle des gewünschten "foo".
Geschichte
Bei der Serialisierung von Daten zur Übertragung in JSON wurden in einer Schleife append/extend ohne Verständnis des Unterschieds auf die endgültige Liste angewendet. Infolgedessen entstanden Strukturen, die das Schema verletzten, wodurch einige Mikrodienste während der Validierung zu abstürzen oder nicht korrekt zu arbeiten begannen.