HOWTO · Python

Come aggiungere più elementi a una lista in Python

Scopri quando usare append(), extend(), l’assegnazione a una slice, la concatenazione di liste o itertools.chain per aggiungere valori a una lista Python.

In questa pagina

Per aggiungere a una lista Python esistente i valori di un iterabile, usa il metodo extend(). Modifica la lista direttamente. Il metodo append() aggiunge un oggetto per chiamata, mentre + e itertools.chain seguito da list() creano una nuova lista. L’assegnazione a una slice permette di inserire valori in una posizione specifica.

Scegli in base al fatto che tu voglia modificare una lista, alla posizione in cui devono comparire i nuovi valori e alla necessità di ottenere un nuovo risultato. Gli esempi seguenti mostrano il comportamento di ciascuna opzione.

Aggiungere un elemento con append()

append() è un metodo delle liste che aggiunge il proprio argomento come singolo oggetto alla fine della lista. Se l’argomento è a sua volta una lista, questa resta un unico elemento annidato. Chiamando append() più volte, ogni chiamata aggiunge un oggetto.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

values = ["red", "blue"]
values.append("green")
print(values)

Per aggiungere più valori separati, potresti chiamare append() una volta per ciascun valore. Se hai un iterabile di valori, di solito è più diretto usare extend().

Aggiungere più elementi con extend()

extend() consuma un iterabile e aggiunge alla lista esistente ogni valore che produce. La lista viene modificata e il metodo restituisce None; continua quindi a usare la variabile della lista originale invece di assegnarle il valore restituito dal metodo.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

colors = ["red", "blue"]
colors.extend(["green", "yellow"])
print(colors)

Funziona anche con altri iterabili, come una tupla o una stringa. Una stringa produce un carattere alla volta, quindi estenderla con "hi" aggiunge separatamente "h" e "i". Usa append() quando vuoi conservare l’iterabile come un unico oggetto.

Inserire più elementi con l’assegnazione a una slice

L’assegnazione a una slice sostituisce la parte selezionata di una lista con i valori di un iterabile. Una slice vuota non seleziona alcun valore esistente: assegnarle dei valori li inserisce e lascia invariato il resto della lista. L’indice determina la posizione in cui compaiono.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

items = ["a", "d"]
items[1:1] = ["b", "c"]
print(items)

Qui la slice inizia e termina all’indice 1, quindi entrambi i nuovi valori vengono inseriti prima del valore originale "d". Una slice non vuota sostituisce invece i valori selezionati: controlla i limiti della slice se vuoi inserire valori anziché sostituirli.

Combinare liste con +

L’operatore + concatena le liste e restituisce una nuova lista. Non modifica nessuno dei due operandi, il che è utile quando vuoi mantenere inalterate le liste originali.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

first = [1, 2]
second = [3, 4]
combined = first + second
print(combined)

Per concatenare due liste, entrambi gli operandi devono essere liste. Se vuoi aggiungere valori a una lista esistente, usa extend() invece di creare e assegnare il risultato della concatenazione.

Creare una lista da iterabili con itertools.chain

itertools.chain produce un iteratore che restituisce, nell’ordine, i valori degli iterabili ricevuti in input. Racchiudilo in list() quando vuoi materializzare quei valori in una nuova lista. È utile quando gli input sono già iterabili o quando vuoi iterare su più sorgenti; non modifica tali sorgenti. Le prestazioni dipendono dal lavoro svolto e dai dati, quindi non c’è un vantaggio universale in termini di efficienza rispetto alle altre opzioni.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

from itertools import chain

numbers = [1, 2]
more_numbers = (3, 4)
combined = list(chain(numbers, more_numbers))
print(combined)

Puoi anche consumare direttamente l’iteratore in un ciclo, senza creare una lista. Materializzalo solo quando ti serve ottenere una lista.

Scegliere l’approccio giusto

  • Usa append() per aggiungere un singolo oggetto, oppure chiamalo più volte se gestisci i valori uno per volta.
  • Usa extend() per aggiungere a una lista esistente tutti i valori di un iterabile.
  • Usa l’assegnazione a una slice per inserire i valori di un iterabile in una posizione specifica; una slice vuota li inserisce senza sostituire i valori esistenti.
  • Usa + per creare una nuova lista a partire da due liste, mantenendo inalterati gli input.
  • Usa list(itertools.chain(...)) per creare una nuova lista con i valori prodotti da più iterabili. Ometti list() se ti basta un iteratore.

Per il caso comune in cui vuoi aggiungere più valori a una lista che hai già, inizia con extend(). Scegli un’alternativa se devi inserire i valori a un indice specifico, ottenere una lista concatenata separata o iterare su più sorgenti.