ProgrammatiePython ontwikkelaar

Wat is het verschil tussen de methoden append() en extend() voor lijsten in Python? Geef voorbeelden waar een verkeerd begrip leidt tot logische fouten.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

De methoden append() en extend() van lijsten in Python dienen om elementen toe te voegen, maar doen dit op een fundamenteel verschillende manier:

  • append(obj) voegt één element (elke object, inclusief een lijst) toe aan het einde van de oorspronkelijke lijst.
  • extend(iterable) voegt alle elementen van de iterabele object één voor één toe (het "ontrolt" als het ware tijdens het toevoegen).

Voorbeeld:

lst = [1, 2, 3] lst.append([4, 5]) # Resultaat: [1, 2, 3, [4, 5]] lst = [1, 2, 3] lst.extend([4, 5]) # Resultaat: [1, 2, 3, 4, 5]

Dit verschil leidt vaak tot logische fouten wanneer men een "platte" lijst verwacht, maar een geneste lijst ontvangt.

Vrag met een valstrik.

Wat gebeurt er als je list1 = [1, 2]; list2 = [3, 4]; list1.append(list2) doet? Hoe ziet list1 eruit? Wat is het verschil met list1.extend(list2)?

Antwoord:

  • Na list1.append(list2) is het resultaat: [1, 2, [3, 4]] — de tweede lijst is toegevoegd als één element (geneste lijst).
  • Na list1.extend(list2) is het resultaat: [1, 2, 3, 4] — de elementen van de tweede lijst zijn "ontrolt" en als aparte elementen toegevoegd.

Voorbeelden van echte fouten door gebrek aan begrip van de nuances van het onderwerp.


Verhaal

Een ontwikkelaar voegde de resultaten van parsing uit meerdere bestanden samen met output.append(parsed_lines). Hierdoor kreeg hij in plaats van een lange platte lijst een lijst van lijsten (één element per bestand), wat de verdere verwerking verstoorde — in het bijzonder, functies die een reeks strings verwachtten begonnen fouten te geven op de invoergegevens.


Verhaal

In het project werd extend gebruikt voor het toevoegen van een string als "foo" (dat wil zeggen, de string werd als iterabel beschouwd). Dit leidde ertoe dat de karakters van de string aparte elementen van de lijst werden: ['f', 'o', 'o'] in plaats van de gewenste "foo".


Verhaal

Bij het serialiseren van gegevens voor verzending naar JSON werden append/extend in een lus toegepast zonder het verschil te begrijpen. Dit resulteerde in structuren die de schema's verstoorden, waardoor sommige microservices faalden tijdens de validatie of niet correct functioneerden.