ProgrammierungPython-Entwickler

Was ist der Unterschied zwischen den Methoden append() und extend() von Listen in Python? Geben Sie Beispiele, bei denen ein falsches Verständnis zu logischen Fehlern führt.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

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 hinzu
  • extend(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.

Fangfrage.

Was passiert, wenn man list1 = [1, 2]; list2 = [3, 4]; list1.append(list2) macht? Wie sieht list1 aus? Wie unterscheidet sich das von list1.extend(list2)?

Antwort:

  • Nach list1.append(list2) ist das Ergebnis: [1, 2, [3, 4]] – die zweite Liste wurde als ein Element (verschachtelte Liste) hinzugefügt
  • Nach list1.extend(list2) ist das Ergebnis: [1, 2, 3, 4] – die Elemente der zweiten Liste wurden "entfaltet" und als separate Elemente hinzugefügt

Beispiele für reale Fehler aufgrund fehlenden Wissens über die Feinheiten des Themas.


Geschichte

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.