HOWTO · Python
Cómo convertir una cadena en una lista en Python
Aprende cuándo usar list(), split(), ast.literal_eval() y las comprensiones para convertir cadenas de Python en caracteres, palabras, campos delimitados o datos de lista validados.
En esta página
Elige el método según qué deba representar cada elemento del resultado. Usa list(text) para obtener un elemento por carácter, text.split() para separar palabras o valores delimitados, ast.literal_eval(text) para analizar texto confiable que ya representa un literal de Python y una comprensión de listas para filtrar o transformar elementos. No uses eval() con entradas que no controles por completo: puede ejecutar código Python arbitrario.
Convertir una cadena en caracteres con list()
list() recorre una cadena y crea un elemento por cada punto de código Unicode. No divide una oración en palabras. Por ejemplo, un acento combinante puede ocupar un punto de código separado, aunque se vea unido a una letra.
text = "Hello"
characters = list(text)
print(characters)
Esto resulta útil para procesar caracteres individualmente. Los espacios y los signos de puntuación también se incluyen como caracteres; elimínalos o transfórmalos explícitamente si la tarea lo requiere.
Separar palabras o valores delimitados con split()
Llama a split() sin argumentos para separar palabras en secuencias de espacios en blanco. Se ignoran los espacios en blanco iniciales y finales, y las secuencias de espacios, tabulaciones o saltos de línea consecutivos funcionan como un único separador.
sentence = "Convert this string to a list"
words = sentence.split()
print(words)
Si la entrada usa un delimitador conocido, pásalo explícitamente. Cuando se permiten espacios alrededor de los campos separados por comas, quita los espacios de cada campo después de dividir:
text = "red, green, blue"
colors = [item.strip() for item in text.split(",")]
print(colors)
Al indicar un separador explícito, se conservan los campos vacíos: "red,,blue".split(",") incluye una cadena vacía entre las comas. Si el separador no aparece, la cadena original se devuelve como único elemento. Usa maxsplit para limitar el número de divisiones; "red,green,blue".split(",", maxsplit=1) mantiene green,blue unido en el segundo elemento.
split() no es un analizador de CSV. Si los campos pueden contener delimitadores entre comillas, como en "red, bright",blue, usa el módulo csv de Python para que se apliquen correctamente las reglas de comillas.
Analizar texto que ya representa una lista
Si el texto ya tiene sintaxis de literal de Python, como "[1, 2, 3]", analízalo con ast.literal_eval(). Esta función acepta valores y contenedores literales sin evaluar expresiones arbitrarias. Aun así, el texto debe tener una sintaxis válida; una entrada mal formada puede generar 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")
Que el análisis termine correctamente no garantiza que el resultado sea una lista: por ejemplo, "(1, 2)" representa una tupla. Comprueba el tipo obtenido antes de usarlo como lista y gestiona los errores de análisis cuando la entrada pueda variar. Para texto JSON, usa json.loads(), porque JSON y la sintaxis de literales de Python son parecidos, pero no idénticos. Trata la entrada como datos: nunca sustituyas ast.literal_eval() por eval() si no controlas por completo el texto.
Transformar o filtrar elementos con una comprensión
Una comprensión puede aplicar una condición o transformación mientras construye el resultado. Este ejemplo conserva solo los caracteres que son dígitos:
text = "P y 3"
digits = [char for char in text if char.isdigit()]
print(digits)
También puedes transformar los caracteres conservados, por ejemplo con [char.lower() for char in text if char.isalpha()]. Una comprensión recorre los caracteres de la cadena. Si necesitas trabajar con palabras, llama primero a split() y luego aplica la comprensión a la lista de palabras.
Elegir el método adecuado
- Usa
list(text)cuando cada carácter deba ser un elemento. - Usa
text.split()para palabras separadas por espacios en blanco, otext.split(separator)para campos simples separados de forma uniforme. - Usa
ast.literal_eval()solo cuando la entrada deba contener datos literales de Python; comprueba el tipo resultante y gestiona el texto mal formado. - Usa
json.loads()para JSON y el módulocsvde Python para campos CSV entrecomillados. - Usa una comprensión cuando también tengas que filtrar o transformar los elementos.
Antes de convertir, determina qué garantías ofrece el formato de entrada. Valida el tipo resultante y los campos obligatorios en el límite por el que el texto externo entra en tu programa, e informa de los datos mal formados de una manera que el código que llama pueda gestionar.