HOWTO · Python

Cómo convertir una cadena en una lista en Python

Una cadena puede convertirse en Python en una lista mediante list(), split(), ast.literal_eval() y comprensiones de listas.

En esta página

Elige el método según los elementos que deba contener la lista. Usa list(text) para un elemento por carácter, text.split() para palabras o valores delimitados, ast.literal_eval(text) para literales de Python confiables y una comprensión cuando necesites filtrar o transformar. No uses eval() con entradas que no controles: puede ejecutar código Python arbitrario.

Convertir una cadena en caracteres con list()

list() recorre una cadena y produce un elemento de lista por cada carácter Unicode. No divide una oración en palabras.

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

Salida:

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

Úsalo cuando quieras procesar a nivel de carácter. Una cadena vacía se convierte en []; los espacios y la puntuación también son caracteres, no separadores.

Separar palabras o valores con split()

Para palabras separadas por espacios en blanco arbitrarios, llama a split() sin argumentos. Los espacios consecutivos se tratan como un solo separador y se ignoran los espacios iniciales o finales. Pasa un separador explícito cuando el formato de entrada lo defina.

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

Salida:

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

Para datos separados por comas, usa split(",") y aplica strip() a cada campo si se permiten espacios tras las comas:

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

Salida:

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

Con un separador explícito se conservan los campos vacíos, y si el separador no aparece, toda la cadena queda como un solo elemento. Si la entrada es CSV con comas entre comillas, usa el módulo csv en lugar de ampliar split().

Usa maxsplit cuando solo los primeros separadores deban crear límites. Por ejemplo, maxsplit=1 deja el resto en el segundo elemento:

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

Salida:

['red', 'green,blue']

Analizar texto que representa una lista

Si la cadena es la representación literal de Python de una lista, como "[1, 2, 3]", usa ast.literal_eval(). Acepta literales y contenedores en lugar de ejecutar expresiones arbitrarias, pero sigue esperando entrada válida y de confianza, y puede lanzar ValueError o SyntaxError con texto mal formado.

import ast

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

Salida:

[1, 2, 3]

No asumas que todo análisis correcto es una lista: una cadena como "(1, 2)" produce una tupla, por eso conviene la comprobación de tipo. Para texto JSON usa json.loads(); la sintaxis literal de Python y JSON son parecidas, pero no idénticas. Nunca sustituyas literal_eval() por eval() con entrada no confiable.

Transformar o filtrar con una comprensión

Usa una comprensión cuando la conversión incluye una regla, por ejemplo conservar solo dígitos o cambiar mayúsculas y minúsculas:

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

Salida:

['3']

La expresión también puede transformar cada elemento, por ejemplo [char.lower() for char in text if char.isalpha()]. Una comprensión opera sobre caracteres salvo que primero llames a split(); combina ambas cuando necesites normalizar palabras.

Elegir el método adecuado

Usa list() para caracteres, split() para un delimitador conocido, ast.literal_eval() para un formato literal de Python validado y una comprensión para filtrar o transformar. Valida la entrada externa antes de analizarla y elige un analizador específico cuando la fuente sea CSV o JSON. Estas distinciones evitan el error habitual de obtener una lista de caracteres cuando se querían palabras, o de ejecutar una entrada que solo debía ser datos.