Come unire le liste in Python
Tutti i modi per unire liste Python: operatore +, extend(), unpacking, itertools.chain e come str.join() trasforma una lista in una string.
Python offre diversi modi per combinare liste e per trasformare una lista di stringhe in un'unica string. Questa pagina tratta entrambe le operazioni in modo chiaro:
- Unire le liste — fondere due o più liste in una nuova lista (usando
+,extend(), unpacking oitertools.chain). - Unire gli elementi di una lista in una string — usando il metodo
str.join(), che concatena gli elementi di una lista in una string delimitata.
Capire la differenza tra queste due operazioni evita una fonte comune di confusione per i principianti.
Unire due liste in una
Usando l'operatore +
Il modo più semplice per fondere due liste è l'operatore +. Restituisce una nuova lista contenente tutti gli elementi di entrambi gli operandi senza modificare gli originali.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined)Output:
[1, 2, 3, 4, 5, 6]È possibile concatenare + per fondere più di due liste in un'unica espressione: a + b + c.
Usando il metodo extend()
extend() aggiunge tutti gli elementi di una lista alla fine di un'altra in place. A differenza di +, modifica la lista originale e non ne crea una nuova.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1)Output:
[1, 2, 3, 4, 5, 6]Usare extend() quando non è necessario mantenere intatta la list1 originale e si vuole evitare di creare una copia extra in memoria.
extend() vs append(): append() aggiunge il suo argomento come singolo elemento, quindi list1.append(list2) produce [1, 2, 3, [4, 5, 6]] — una lista annidata, non una lista fusa. Usare sempre extend() quando si vuole appiattire la seconda lista nella prima.
Usando l'unpacking (operatore *)
Python 3.5 e versioni successive consentono la sintassi di unpacking con asterisco all'interno di un letterale di lista. Questo approccio è conciso e funziona con qualsiasi numero di iterabili in un'unica espressione.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = [*list1, *list2]
print(combined)Output:
[1, 2, 3, 4, 5, 6]È anche possibile inserire elementi aggiuntivi inline: [0, *list1, *list2, 7].
Usando itertools.chain()
itertools.chain() dalla libreria standard unisce qualsiasi numero di iterabili in modo lazy — nessuna lista intermedia viene creata finché non si richiedono i valori. Questa è l'opzione più efficiente in termini di memoria quando si elaborano sequenze di grandi dimensioni.
import itertools
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list(itertools.chain(list1, list2))
print(combined)Output:
[1, 2, 3, 4, 5, 6]Passare itertools.chain(*nested) per appiattire una lista di liste in una sola chiamata.
Unire gli elementi di una lista in una string con str.join()
str.join() è un metodo di string — viene chiamato sulla string delimitatrice e accetta un iterabile come argomento. Restituisce una singola string con tutti gli elementi concatenati, separati dal delimitatore.
delimiter.join(iterable)Esempio di base
Output:
apple, banana, cherryPassare una string vuota '' come delimitatore per concatenare senza alcun separatore.
Delimitatori comuni
| Delimitatore | Espressione | Risultato |
|---|---|---|
| Virgola-spazio | ', '.join(['a', 'b', 'c']) | a, b, c |
| Spazio | ' '.join(['Python', 'is', 'great']) | Python is great |
| Trattino | '-'.join(['2024', '01', '15']) | 2024-01-15 |
| A capo | '\n'.join(['line one', 'line two']) | blocco multiriga |
| Nessun separatore | ''.join(['H', 'i', '!']) | Hi! |
Unire una lista di numeri
str.join() richiede che ogni elemento sia una string. Passare interi direttamente genera un TypeError. Convertirli prima con map(str, ...) o un'espressione generatrice.
nums = [10, 20, 30]
result = ', '.join(map(str, nums))
print(result)Output:
10, 20, 30Usare un'espressione generatrice ottiene lo stesso risultato e consente di formattare ogni numero durante l'elaborazione:
Output:
12345Costruire string multiriga
'\n'.join() è il modo idiomatico per costruire una string multiriga da una lista di righe senza newline finali.
lines = ['line one', 'line two', 'line three']
block = '\n'.join(lines)
print(block)Output:
line one
line two
line threeScegliere l'approccio giusto
| Obiettivo | Metodo migliore |
|---|---|
| Fondere due liste in una nuova lista | Operatore + |
| Aggiungere tutti gli elementi di una lista a un'altra | extend() |
| Combinare più iterabili senza una copia extra | itertools.chain() |
| Combinare all'interno di un letterale o con elementi aggiuntivi | Unpacking [*a, *b] |
| Trasformare una lista di stringhe in una string delimitata | str.join() |
| Trasformare una lista di numeri in una string | str.join(map(str, lst)) |
Argomenti correlati
- Liste Python — creazione, indicizzazione e slicing delle liste
- Metodi delle liste — riferimento completo per
append(),extend(),remove()e altri - Iterare le liste — iterazione sugli elementi di una lista con
forewhile - Copiare le liste — copia superficiale e profonda
- List Comprehension — costruzione e trasformazione di liste in un'unica espressione
- Concatenare stringhe — altri modi per costruire stringhe da parti