ProgrammazioneSviluppatore Python

Qual è la differenza tra il metodo append() e extend() delle liste in Python? Fornisci esempi in cui una comprensione errata porta a errori logici.

Supera i colloqui con l'assistente IA Hintsage

Risposta.

I metodi append() ed extend() delle liste in Python servono per aggiungere elementi, ma lo fanno in modo fondamentalmente diverso:

  • append(obj) aggiunge un singolo elemento (qualsiasi oggetto — incluso una lista) alla fine della lista originale.
  • extend(iterable) aggiunge tutti gli elementi dell'oggetto iterabile uno alla volta (come se "esponesse" gli elementi durante l'aggiunta).

Esempio:

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

Questa differenza spesso causa errori logici, quando ci si aspetta una lista "piana" e si ottiene una lista annidata.

Domanda ingannevole.

Cosa succede se faccio list1 = [1, 2]; list2 = [3, 4]; list1.append(list2)? Come appare list1? Qual è la differenza rispetto a list1.extend(list2)?

Risposta:

  • Dopo list1.append(list2) il risultato è: [1, 2, [3, 4]] — la seconda lista è stata aggiunta come un singolo elemento (lista annidata).
  • Dopo list1.extend(list2) il risultato è: [1, 2, 3, 4] — gli elementi della seconda lista sono "esposti" e aggiunti come elementi separati.

Esempi di errori reali dovuti alla mancanza di comprensione delle sottigliezze dell'argomento.


Storia

Uno sviluppatore, unendo i risultati di parsing da più file, ha utilizzato output.append(parsed_lines). Di conseguenza, invece di una lunga lista piatta ha ottenuto una lista di liste (un elemento per ogni file), il che ha rotto tutto il successivo trattamento — in particolare, le funzioni che si aspettavano una sequenza di stringhe hanno iniziato a generare errori sui dati di input.


Storia

Nel progetto si è utilizzato extend per aggiungere una stringa come "foo" (quindi la stringa era trattata come iterabile). Questo ha portato al fatto che i caratteri della stringa sono diventati elementi separati della lista: ['f', 'o', 'o'] invece di ottenere "foo".


Storia

Durante la serializzazione dei dati per la trasmissione in JSON, sono stati utilizzati append/extend in un ciclo senza capire la differenza. Di conseguenza, si sono ottenute strutture che violavano lo schema, causando crash di alcuni microservizi durante la fase di validazione o funzionamenti errati.