Conversión entre tipos de datos
Introducción
En la programación con Python, es común la necesidad de transformar datos de un tipo a otro. Por ejemplo, podríamos tener un número almacenado como texto (cadena) y necesitar realizar operaciones matemáticas con él, o podríamos querer convertir una lista en un conjunto para eliminar duplicados. La conversión entre tipos de datos es una operación fundamental que nos permite manipular la información de manera flexible y adaptarla a nuestras necesidades específicas.
Python ofrece diversas funciones integradas para realizar estas conversiones de manera sencilla y directa. En este artículo exploraremos las diferentes técnicas para convertir datos entre los principales tipos disponibles en el lenguaje.
Funciones de conversión
Funciones de conversión básicas
Python proporciona funciones integradas que permiten convertir datos a los tipos básicos:
# Conversión a entero (int)
numero_entero = int("25")
print(numero_entero) # Salida: 25
print(type(numero_entero)) # Salida: <class 'int'>
# Conversión a float
numero_decimal = float("25.7")
print(numero_decimal) # Salida: 25.7
print(type(numero_decimal)) # Salida: <class 'float'>
# Conversión a cadena (str)
texto = str(25)
print(texto) # Salida: "25"
print(type(texto)) # Salida: <class 'str'>
# Conversión a booleano (bool)
valor_booleano = bool(1) # Cualquier número distinto de 0 se considera True
print(valor_booleano) # Salida: True
print(type(valor_booleano)) # Salida: <class 'bool'>
Conversiones numéricas
Las conversiones entre tipos numéricos son muy comunes:
# De float a int (trunca el decimal sin redondear)
entero_desde_float = int(9.8)
print(entero_desde_float) # Salida: 9
# De cadena a int con base específica (binario, base 2)
binario_a_entero = int("1010", 2)
print(binario_a_entero) # Salida: 10
# De cadena a int con base específica (hexadecimal, base 16)
hexa_a_entero = int("1A", 16)
print(hexa_a_entero) # Salida: 26
# Redondeo (no es estrictamente una conversión)
redondeado = round(9.8)
print(redondeado) # Salida: 10
Conversiones hacia y desde cadenas
Las conversiones que involucran cadenas de texto son particularmente útiles:
# Lista a cadena usando join
lista_nombres = ["Ana", "Luis", "Carlos"]
texto_nombres = ", ".join(lista_nombres)
print(texto_nombres) # Salida: "Ana, Luis, Carlos"
# Cadena a lista usando split
cadena_palabras = "Python es divertido"
lista_palabras = cadena_palabras.split()
print(lista_palabras) # Salida: ['Python', 'es', 'divertido']
# Número a cadena con formato específico
precio = 29.95
precio_formateado = f"{precio:.1f}€"
print(precio_formateado) # Salida: "30.0€"
# Convertir cada carácter de una cadena a una lista
lista_caracteres = list("Hola")
print(lista_caracteres) # Salida: ['H', 'o', 'l', 'a']
Conversiones entre estructuras de datos
Python permite convertir fácilmente entre distintas estructuras de datos:
# Lista a tupla
mi_lista = [1, 2, 3, 4]
mi_tupla = tuple(mi_lista)
print(mi_tupla) # Salida: (1, 2, 3, 4)
# Tupla a lista
otra_tupla = (5, 6, 7, 8)
otra_lista = list(otra_tupla)
print(otra_lista) # Salida: [5, 6, 7, 8]
# Lista a conjunto (elimina duplicados)
lista_con_duplicados = [1, 2, 2, 3, 4, 4, 5]
conjunto = set(lista_con_duplicados)
print(conjunto) # Salida: {1, 2, 3, 4, 5}
# Conjunto a lista
conjunto_numeros = {10, 20, 30}
lista_numeros = list(conjunto_numeros)
print(lista_numeros) # Salida: [10, 20, 30] (el orden puede variar)
# Lista de tuplas a diccionario
lista_pares = [("nombre", "Laura"), ("edad", 29), ("ciudad", "Madrid")]
diccionario = dict(lista_pares)
print(diccionario) # Salida: {'nombre': 'Laura', 'edad': 29, 'ciudad': 'Madrid'}
# Diccionario a lista de tuplas
mi_dict = {"a": 1, "b": 2, "c": 3}
items_lista = list(mi_dict.items())
print(items_lista) # Salida: [('a', 1), ('b', 2), ('c', 3)]
Manejo de errores en conversiones
Las conversiones pueden fallar si el dato de origen no es compatible con el tipo de destino:
try:
# Esto generará un error porque "abc" no puede convertirse a entero
numero = int("abc")
except ValueError as error:
print(f"Error de conversión: {error}")
# Salida: Error de conversión: invalid literal for int() with base 10: 'abc'
# Comprobación preventiva
texto_a_convertir = "123.45"
if texto_a_convertir.replace(".", "", 1).isdigit():
# El método replace quita un punto para permitir decimales
numero = float(texto_a_convertir)
print(f"Conversión exitosa: {numero}")
else:
print("El texto no puede convertirse a número")
Conversiones implícitas
Python realiza algunas conversiones automáticamente:
# Entero y float en operación (el resultado es float)
resultado = 5 + 3.2
print(resultado) # Salida: 8.2
print(type(resultado)) # Salida: <class 'float'>
# Concatenación implícita convierte número a string
nombre = "Juan"
edad = 30
mensaje = nombre + " tiene " + str(edad) + " años"
print(mensaje) # Salida: "Juan tiene 30 años"
# Con f-strings la conversión a string es automática
mensaje_f = f"{nombre} tiene {edad} años"
print(mensaje_f) # Salida: "Juan tiene 30 años"
Casos especiales de conversión
Existen algunas conversiones menos comunes pero igualmente útiles:
# Bytes a cadena y viceversa
texto_original = "¡Hola, Python!"
texto_bytes = texto_original.encode('utf-8') # Convierte texto a bytes
print(texto_bytes) # Salida: b'\xc2\xa1Hola, Python!'
texto_recuperado = texto_bytes.decode('utf-8') # Convierte bytes a texto
print(texto_recuperado) # Salida: "¡Hola, Python!"
# Convertir unicode a cadena (útil para emojis y caracteres especiales)
codigo_unicode = "\U0001F600" # Código de un emoji sonriente
print(codigo_unicode) # Salida: 😀
# Convertir diccionario a objeto JSON y viceversa
import json
mi_diccionario = {"nombre": "Eva", "aficiones": ["lectura", "natación"]}
json_str = json.dumps(mi_diccionario) # Diccionario a JSON string
print(json_str) # Salida: '{"nombre": "Eva", "aficiones": ["lectura", "nataci\\u00f3n"]}'
diccionario_recuperado = json.loads(json_str) # JSON string a diccionario
print(diccionario_recuperado) # Salida: {'nombre': 'Eva', 'aficiones': ['lectura', 'natación']}
Resumen
La conversión entre tipos de datos es una operación fundamental en Python que nos permite adaptar la información según nuestras necesidades. Hemos visto cómo convertir entre tipos básicos (números, cadenas, booleanos), así como entre estructuras de datos más complejas (listas, tuplas, conjuntos, diccionarios). También hemos aprendido sobre conversiones implícitas y cómo manejar posibles errores durante el proceso.
Dominar estas técnicas de conversión es esencial para trabajar eficientemente con Python, ya que en muchas situaciones necesitaremos transformar datos entre diferentes formatos y estructuras. En los próximos artículos, comenzaremos a explorar las funciones, que son bloques de código reutilizables que nos permitirán organizar mejor nuestro código y ampliar significativamente nuestras capacidades de programación.