HOWTO · Python

Come convertire una stringa in una lista in Python

Scopri quando usare list(), split(), ast.literal_eval() e le list comprehension per ottenere caratteri, parole, valori delimitati o dati di lista validati da una stringa Python.

In questa pagina

Scegli il metodo in base a ciò che deve rappresentare ciascun elemento della lista risultante. Usa list(text) per ottenere un elemento per ogni carattere, text.split() per parole o valori separati da un delimitatore, ast.literal_eval(text) per testo attendibile che rappresenta già un literal Python e una list comprehension per filtrare o trasformare gli elementi. Non usare eval() su input che non controlli completamente: può eseguire codice Python arbitrario.

Convertire una stringa in caratteri con list()

list() scorre una stringa e crea un elemento per ogni punto di codice Unicode. Non divide una frase in parole. Per esempio, un accento combinante può essere un punto di codice separato anche quando visivamente appare unito alla lettera.

text = "Hello"
characters = list(text)
print(characters)

Questo è utile per elaborare i caratteri singolarmente. Anche spazi e punteggiatura vengono inclusi come caratteri: rimuovili o trasformali esplicitamente se il compito lo richiede.

Separare parole o valori delimitati con split()

Chiama split() senza argomenti per separare le parole in corrispondenza di sequenze di spazi bianchi. Gli spazi iniziali e finali vengono ignorati; spazi ripetuti, tabulazioni e interruzioni di riga valgono come un unico separatore.

sentence = "Convert this string to a list"
words = sentence.split()
print(words)

Se l’input usa un delimitatore noto, passalo esplicitamente. Se sono ammessi spazi attorno ai campi separati da virgole, rimuovili da ciascun campo dopo la suddivisione:

text = "red, green, blue"
colors = [item.strip() for item in text.split(",")]
print(colors)

Con un separatore esplicito i campi vuoti vengono mantenuti: "red,,blue".split(",") include una stringa vuota tra le virgole. Se il separatore non è presente, la stringa originale resta l’unico elemento. Usa maxsplit per limitare il numero di suddivisioni: "red,green,blue".split(",", maxsplit=1) mantiene green,blue insieme nel secondo elemento.

split() non è un parser CSV. Se i campi possono contenere delimitatori tra virgolette, come in "red, bright",blue, usa il modulo Python csv, che gestisce correttamente le regole delle virgolette.

Analizzare testo che rappresenta già una lista

Se il testo usa già la sintassi dei literal Python, per esempio "[1, 2, 3]", analizzalo con ast.literal_eval(). La funzione accetta valori e contenitori literal senza valutare espressioni arbitrarie. Il testo deve comunque essere sintatticamente valido: un input malformato può causare ValueError o SyntaxError.

import ast

text = "[1, 2, 3]"
values = ast.literal_eval(text)
if isinstance(values, list):
    print(values)
else:
    print("The parsed value is not a list")

Un’analisi riuscita non garantisce che il risultato sia una lista: per esempio, "(1, 2)" rappresenta una tupla. Controlla il tipo del valore ottenuto prima di usarlo come lista e gestisci gli errori di analisi se l’input può variare. Per testo JSON usa json.loads(), perché la sintassi JSON e quella dei literal Python sono simili ma non identiche. Tratta l’input come dati: non sostituire ast.literal_eval() con eval() se il testo non è completamente sotto il tuo controllo.

Trasformare o filtrare gli elementi con una comprehension

Una comprehension può applicare una condizione o una trasformazione mentre crea il risultato. Questo esempio conserva solo i caratteri numerici:

text = "P y 3"
digits = [char for char in text if char.isdigit()]
print(digits)

Puoi anche trasformare i caratteri conservati, per esempio con [char.lower() for char in text if char.isalpha()]. Una comprehension scorre i caratteri della stringa. Se vuoi elaborare parole, chiama prima split() e poi applica la comprehension alla lista di parole.

Scegliere il metodo giusto

  • Usa list(text) quando ogni carattere deve diventare un elemento.
  • Usa text.split() per parole separate da spazi bianchi oppure text.split(separator) per campi separati da un delimitatore semplice e uniforme.
  • Usa ast.literal_eval() solo quando l’input deve contenere dati nel formato dei literal Python; controlla il tipo risultante e gestisci il testo malformato.
  • Usa json.loads() per JSON e il modulo Python csv per campi CSV tra virgolette.
  • Usa una comprehension quando devi anche filtrare o trasformare gli elementi.

Prima di convertire, considera quali garanzie offre il formato dell’input. Convalida il tipo risultante e i campi obbligatori nel punto in cui il testo esterno entra nel programma, e segnala i dati malformati in un modo che il codice chiamante possa gestire.