Articolo originale: Python List Append VS Python List Extend – The Difference Explained with Array Method Examples

🔹 Benvenuto/a!

Se vuoi imparare ad usare .append() e .extend() e a comprendere la differenza tra i due, allora sei nel posto giusto. Sono due potenti metodi delle liste che utilizzerai sicuramente nei tuoi progetti con Python.

In questo articolo imparerai:

  • Come e quando utilizzare il metodo .append().
  • Come e quando utilizzare il metodo .extend().
  • Le loro principali differenze.

Iniziamo! ✨

🔸 Append

Vediamo come funziona il metodo .append() dietro le quinte.

Casi d'uso

Puoi utilizzare questo metodo quando vuoi aggiungere un singolo elemento in coda a una lista.

💡 Suggerimento: puoi aggiungere elementi di ogni tipo di dato, poiché le liste possono contenere elementi di diversi tipi di dato.

image-105

Sintassi e Parametri

Per eseguire il metodo .append(), dovrai usare questa sintassi:

image-104

Da sinistra a destra:

  • La lista che verrà modificata. Solitamente è una variabile che fa riferimento a una lista.
  • Un punto, seguito dal nome del metodo .append().
  • Tra parentesi, l'elemento che verrà aggiunto in coda alla lista.

💡 Suggerimenti: il punto è molto importante. Questa notazione viene chiamata "notazione a punto" (dot notation), e il punto sta a significare "esegui il metodo su questa lista specifica". Dunque, il metodo verrà eseguito sulla lista menzionata prima del punto.

Esempi

Ecco un esempio di come usare .append():

# Definiamo la lista
>>> nums = [1, 2, 3, 4]

# Aggiungiamo il numero 5 in coda alla lista
>>> nums.append(5)

# Osserva il nuovo valore della lista
>>> nums
[1, 2, 3, 4, 5]

💡 Suggerimenti: quando usi .append() la lista originale viene modificata. Questo metodo non crea una copia della lista, ma modifica la lista originale salvata in memoria.

Fingiamo di star facendo una ricerca per cui vogliamo analizzare una raccolta dati utilizzando Python. Dobbiamo aggiungere una nuova misurazione a una lista di valori già esistente.

In che modo? Possiamo usare il metodo .append()!

Ecco come:

# Lista già esistente
>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3]

# Aggiungiamo un float (numero decimale) in coda alla lista già esistente
>>> nums.append(7.34)

# Osserva il nuovo valore della lista
>>> nums
[5.6, 7.44, 6.75, 4.56, 2.3, 7.34]

Equivalente a...

Se hai familiarità con lo slicing di stringhe, liste o tuple, quello che .append() realmente fa dietro le quinte è equivalente a:

a[len(a):] = [x]

Grazie a questo esempio, puoi notare che sono equivalenti.

Usando .append():

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3]
>>> nums.append(4.52)
>>> nums
[5.6, 7.44, 6.75, 4.56, 2.3, 4.52]

Usando lo slicing di una lista:

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3]
>>> nums[len(nums):] = [4.52]
>>> nums
[5.6, 7.44, 6.75, 4.56, 2.3, 4.52]

Aggiungere una sequenza

Ora, cosa pensi di questo esempio? Quale sarà l'output, secondo te?

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3]
>>> nums.append([5.67, 7.67, 3.44])
>>> nums
# OUTPUT?

Sei pronto? L'output sarà questo:

[5.6, 7.44, 6.75, 4.56, 2.3, [5.67, 7.67, 3.44]]

Potresti chiederti: per quale motivo la lista intera è stata aggiunta come se fosse un singolo elemento? Questo avviene perché il metodo .append() aggiunge un intero elemento in coda alla lista. Se l'elemento è una sequenza (come una lista, un dizionario o una tupla), l'intera sequenza sarà aggiunta come singolo elemento alla lista esistente.

Ecco un altro esempio (qui in basso). In questo caso, l'elemento è una tupla ed è stata aggiunta come elemento unico della lista, non come elementi individuali:

>>> names = ["Lulu", "Nora", "Gino", "Bryan"]
>>> names.append(("Emily", "John"))
>>> names
['Lulu', 'Nora', 'Gino', 'Bryan', ('Emily', 'John')]

🔹 Extend

Adesso esploriamo le funzionalità del metodo .extend().

Casi d'uso

Puoi usare questo metodo se hai bisogno di aggiungere diversi elementi ad una lista come elementi individuali.

Lascia che ti illustri l'importanza di questo metodo utilizzando un amico che hai conosciuto poco fa: il metodo .append(). Basandoci su quello che hai imparato fino ad ora, se volessimo aggiungere diversi elementi individuali ad una lista usando .append(), avremmo bisogno di usare .append() diverse volte:

# Lista che vogliamo modificare
>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3]

# Aggiungiamo gli elementi
>>> nums.append(2.3)
>>> nums.append(9.6)
>>> nums.append(4.564)
>>> nums.append(7.56)

# Lista aggiornata
>>> nums
[5.6, 7.44, 6.75, 4.56, 2.3, 2.3, 9.6, 4.564, 7.56]

Sicuramente stai pensando che non è molto efficiente, vero? E se dovessimo aggiungere migliaia o milioni di valori? Non possiamo di certo scrivere migliaia o milioni di righe di codice per un'operazione così semplice. Ci vorrebbe una vita!

Vediamo allora un'alternativa. Possiamo inserire i valori che vogliamo aggiungere ad una lista separata e usare un loop per eseguire .append() tante volte quante ne abbiamo bisogno:

# Lista che vogliamo modificare
>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3]

# Valori che vogliamo aggiungere
>>> new_values = [2.3, 9.6, 4.564, 7.56]

# loop for che aggiungerà i valori
>>> for num in new_values:
	nums.append(num)

# Valori aggiornati della lista
>>> nums
[5.6, 7.44, 6.75, 4.56, 2.3, 2.3, 9.6, 4.564, 7.56]

Molto più efficiente, vero? Stiamo scrivendo solo poche righe. Ma c'è un modo ancora più efficiente, leggibile e compatto per ottenere lo stesso risultato: .extend()!

>>> nums = [5.6, 7.44, 6.75, 4.56, 2.3]
>>> new_values = [2.3, 9.6, 4.564, 7.56]

# È qui che avviene la magia! Nessun loop for
>>> nums.extend(new_values)

# La lista è stata aggiornata con i nuovi valori
>>> nums
[5.6, 7.44, 6.75, 4.56, 2.3, 2.3, 9.6, 4.564, 7.56]

Vediamo come funziona questo metodo dietro le quinte.

Sintassi e Parametri

Per eseguire il metodo .extend(), dovrai usare questa sintassi:

image-110

Da sinistra a destra:

  • La lista che sarà modificata. Di solito questa è una variabile che fa riferimento a una lista.
  • Un punto . (fino a qui è tutto uguale a prima).
  • Il nome del metodo extend (qui le cose iniziano a cambiare...).
  • Tra parentesi, un iterabile (lista, tupla, dizionario, set, o stringa) che contiene gli elementi che saranno aggiunti come elementi individuali della lista.

💡 Suggerimenti: stando alla documentazione di Python, un iterabile è definito come "un oggetto capace di restituire i suoi elementi uno alla volta". Gli iterabili possono essere usati in un loop for e, poiché restituiscono i propri elementi uno alla volta, possiamo "fare qualcosa" con ognuno di essi, uno per ogni iterazione.

Dietro le quinte

Vediamo come funziona .extend() dietro le quinte. Ecco un esempio:

# Lista che verrà modificata
>>> a = [1, 2, 3, 4]

# Sequenza di valori che vogliamo aggiungere alla lista a
>>> b = [5, 6, 7]

# Eseguiamo .extend()
>>> a.extend(b)

# Ecco la lista aggiornata. Adesso la lista a contiene i valori 5, 6, e 7
>>> a
[1, 2, 3, 4, 5, 6, 7]

Puoi pensare a .extend() come a un metodo che aggiunge gli elementi in coda ad una lista nello stesso ordine in cui sono.

In questo caso, abbiamo una lista a = [1, 2, 3, 4], come si può vedere nel diagramma in basso. Abbiamo anche una lista b = [5, 6, 7] che contiene la sequenza di valori che vogliamo aggiungere. Il metodo prende ogni elemento di b e lo aggiunge alla lista a nello stesso ordine.

image-1
Step 1. Viene aggiunto il primo elemento
image-2
Step 2. Viene aggiunto il secondo elemento
image-3
Step 3. Viene aggiunto il terzo elemento

Una volta completato questo processo, avremo la lista a e potremo lavorare con i valori come elementi individuali della lista a.

image-109

💡 Suggerimenti: la lista b usata per estendere la lista a rimane intatta dopo questo processo. Puoi ancora usarla dopo aver eseguito .extend(). Eccone la prova:

>>> a = [1, 2, 3, 4]
>>> b = [5, 6, 7]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7]

# La lista b è intatta!
>>> b
[5, 6, 7]

Esempi

Potrebbe interessarti sapere come funziona il metodo .extend() con diverse tipologie di iterabili. Vediamolo nei seguenti esempi:

Con le tuple:
Il processo funziona esattamente nello stesso modo con le tuple. Gli elementi individuali della tupla vengono aggiunti uno per uno nell'ordine in cui compaiono.

# Lista che verrà estesa
>>> a = [1, 2, 3, 4]

# Valori che verranno aggiunti (l'iterabile è una tupla!)
>>> b = (1, 2, 3, 4)

# Esecuzione del metodo
>>> a.extend(b)

# Il valore della lista a è stato aggiornato!
>>> a
[1, 2, 3, 4, 1, 2, 3, 4]

Con i set:
La stessa cosa avviene con i set. Gli elementi del set sono aggiunti uno per uno.

# Lista che verrà estesa
>>> a = [1, 2, 3, 4]

# Valori che verranno aggiunti (l'iterabile è un set!)
>>> c = {5, 6, 7}

# Esecuzione del metodo
>>> a.extend(c)

# Il valore di a è stato aggiornato
>>> a
[1, 2, 3, 4, 5, 6, 7]

Con le stringhe:
Le stringhe funzionano in maniera un po' diversa con il metodo .extend(). Ogni carattere della stringa è considerato un "elemento", dunque i caratteri vengono aggiunti uno per uno nell'ordine in cui compaiono nella stringa.

# Lista che verrà estesa
>>> a = ["a", "b", "c"]

# Stringa che verrà usata per estendere la lista
>>> b = "Hello, World!"

# Esecuzione del metodo
>>> a.extend(b)

# Il valore di a è stato aggiornato
>>> a
['a', 'b', 'c', 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']

Con i dizionari:
I dizionari si comportano in modo peculiare con il metodo .extend(). In questo caso, le chiavi del dizionario vengono aggiunte una per una. I valori delle corrispondenti coppie chiave-valore non vengono aggiunti.

In questo esempio (in basso), le chiavi sono "d", "e", e "f". Questi valori vengono aggiunti alla lista a.

# Lista che verrà estesa
>>> a = ["a", "b", "c"]

# Dizionario che verrà usato per estendere la lista
>>> b = {"d": 5, "e": 6, "f": 7}

# Esecuzione del metodo
>>> a.extend(b)

# Il valore di a è stato aggiornato
>>> a
['a', 'b', 'c', 'd', 'e', 'f']

Equivalente a...

Quello che il metodo .extend() fa è equivalente a a[len(a):] = iterabile. Ecco un esempio per mostrare come siano equivalenti:

Usando .extend():

# Lista che verrà estesa
>>> a = [1, 2, 3, 4]

# Valori che verranno aggiunti
>>> b = (6, 7, 8)

# Esecuzione del metodo
>>> a.extend(b)

# La lista è stata aggiornata
>>> a
[1, 2, 3, 4, 6, 7, 8]

Usando lo slicing:

# Lista che verrà estesa
>>> a = [1, 2, 3, 4]

# Valori che verranno aggiunti
>>> b = (6, 7, 8)

# Dichiarazione di assegnazione. Assegna l'iterabile b come porzione finale della lista a
>>> a[len(a):] = b

# Il valore di a è stato aggiornato
>>> a
[1, 2, 3, 4, 6, 7, 8]

Il risultato è lo stesso, ma usare .extend() rende il tutto molto più leggibile e compatto, vero? Python offre strumenti davvero eccezionali per facilitare il nostro lavoro.

🔸 Riassunto delle differenze

Adesso che sai come usare .append() e .extend(), vediamo un riassunto delle loro differenze principali:

  • Effetti: .append() aggiunge un singolo elemento in coda alla lista, mentre .extend() può aggiungere più di un singolo elemento in coda alla lista.
  • Parametri: .append() può avere un solo elemento come parametro, mentre .extend() può avere un iterabile come parametro (liste, tuple, dizionari, set, stringhe).

Spero che il mio articolo ti sia piaciuto e che tu l'abbia trovato utile. Adesso puoi lavorare con .append() e .extend() nei tuoi progetti con Python. Dai un'occhiata ai miei corsi online. Seguimi su Twitter. ⭐️