HOWTO · Python

Converti una stringa in una lista in Python

In Python una stringa può essere convertita in una lista con list(), split(), ast.literal_eval() e le list comprehension.

In questa pagina

Scegli il metodo in base agli elementi della lista risultante. Usa list(text) per un elemento per carattere, text.split() per parole o valori delimitati, ast.literal_eval(text) per literal Python attendibili e una comprehension quando serve filtrare o trasformare. Non usare eval() con input che non controlli del tutto: può eseguire codice Python arbitrario.

Convertire una stringa in caratteri con list()

list() scorre una stringa e produce un elemento di lista per ogni carattere Unicode. Non divide una frase in parole.

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

Output:

['H', 'e', 'l', 'l', 'o']

Usala quando serve elaborazione a livello di carattere. Una stringa vuota diventa []; spazi e punteggiatura sono anch’essi caratteri, non separatori.

Separare parole o valori con split()

Per parole separate da spazi arbitrari, chiama split() senza argomenti. Gli spazi consecutivi contano come un solo separatore e gli spazi iniziali o finali vengono ignorati. Passa un separatore esplicito quando il formato di input ne definisce uno.

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

Output:

['Convert', 'this', 'string', 'to', 'a', 'list']

Per dati separati da virgole, usa split(",") e applica strip() a ogni campo se sono ammessi spazi dopo le virgole:

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

Output:

['red', 'green', 'blue']

Con un separatore esplicito i campi vuoti restano preservati, e un separatore assente lascia l’intera stringa come un solo elemento. Se l’input è CSV con virgole tra virgolette, usa il modulo csv invece di estendere split().

Usa maxsplit quando solo i primi separatori devono creare confini. Ad esempio, maxsplit=1 lascia il resto nel secondo elemento:

text = "red,green,blue"
first_two = text.split(",", maxsplit=1)
print(first_two)

Output:

['red', 'green,blue']

Analizzare testo che rappresenta una lista

Se la stringa è una rappresentazione literal Python come "[1, 2, 3]", usa ast.literal_eval(). Accetta literal e contenitori invece di eseguire espressioni arbitrarie, ma richiede comunque input valido e affidabile e può sollevare ValueError o SyntaxError per testo malformato.

import ast

text = "[1, 2, 3]"
values = ast.literal_eval(text)
if not isinstance(values, list):
    raise TypeError("expected a list literal")
print(values)

Output:

[1, 2, 3]

Non dare per scontato che ogni analisi riuscita sia una lista: una stringa come "(1, 2)" produce una tupla, ecco perché il controllo di tipo è utile. Per testo JSON usa json.loads(); la sintassi literal di Python e JSON sono simili ma non identiche. Non sostituire mai literal_eval() con eval() per input non attendibile.

Trasformare o filtrare con una comprehension

Usa una comprehension quando la conversione include una regola, ad esempio tenere solo le cifre o cambiare maiuscole/minuscole:

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

Output:

['3']

L’espressione può anche trasformare ogni elemento, ad esempio [char.lower() for char in text if char.isalpha()]. Una comprehension opera sui caratteri a meno che tu non chiami prima split(); combina le due quando serve normalizzare parole.

Scegliere il metodo corretto

Usa list() per i caratteri, split() per un delimitatore noto, ast.literal_eval() per un formato literal Python validato e una comprehension per filtrare o trasformare. Valida l’input esterno prima dell’analisi e scegli un parser specifico quando la fonte è CSV o JSON. Queste distinzioni evitano l’errore comune di ottenere una lista di caratteri quando si volevano parole, o di eseguire input che doveva essere solo dati.