ProgrammationDéveloppeur Python

Quelle est la différence entre la méthode append() et extend() pour les listes en Python ? Donnez des exemples où une compréhension incorrecte conduit à des erreurs logiques.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Les méthodes append() et extend() pour les listes en Python servent à ajouter des éléments, mais elles le font de manière fondamentalement différente :

  • append(obj) ajoute un élément (n'importe quel objet, y compris une liste) à la fin de la liste d'origine.
  • extend(iterable) ajoute tous les éléments de l'objet itérable un par un (comme s'il "dépliait" cet objet lors de l'ajout).

Exemple :

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

Cette différence est souvent à l'origine d'erreurs logiques, lorsque l'on s'attend à une liste "plate" et que l'on obtient des listes imbriquées.

Question piège.

Que se passe-t-il si l'on fait list1 = [1, 2]; list2 = [3, 4]; list1.append(list2) ? À quoi ressemble list1 ? Quelle est la différence avec list1.extend(list2) ?

Réponse :

  • Après list1.append(list2), le résultat est : [1, 2, [3, 4]] — la deuxième liste a été ajoutée comme un seul élément (liste imbriquée).
  • Après list1.extend(list2), le résultat est : [1, 2, 3, 4] — les éléments de la deuxième liste ont été "dépliés" et ajoutés en tant qu'éléments distincts.

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet.


Histoire

Un développeur, en combinant les résultats de l'analyse de plusieurs fichiers, faisait output.append(parsed_lines). En résultat, au lieu d'une longue liste plate, il obtenait une liste de listes (un élément par fichier), ce qui cassait tout le traitement ultérieur — en particulier, les fonctions qui attendaient une séquence de chaînes rencontraient des erreurs avec les données d'entrée.


Histoire

Dans un projet, extend était utilisé pour ajouter une chaîne comme "foo" (c'est-à-dire que la chaîne était considérée comme itérable). Cela a conduit à ce que les caractères de la chaîne deviennent des éléments séparés de la liste : ['f', 'o', 'o'] au lieu du souhaité "foo".


Histoire

Lors de la sérialisation des données pour transmission au JSON, append/extend étaient utilisés en boucle sans comprendre la différence. En conséquence, des structures contraires au schéma étaient produites, ce qui entraînait des échecs de certaines microservices lors de la validation ou un fonctionnement incorrect.