
Estructuras de Datos en Python
Estructuras de Datos en Python
Python ofrece diversas estructuras de datos que facilitan el manejo de información en nuestros programas. Este artículo explora los tipos básicos, estructuras avanzadas y buenas prácticas para manipularlos.
Tipos Básicos
Python incluye varios tipos de datos fundamentales:
- int: Números enteros (
1
,-10
,42
) - float: Números decimales (
3.14
,-0.5
,2.0
) - bool: Valores booleanos (
True
,False
) - str: Cadenas de texto (
"Hola"
,'Python'
) - NoneType: Representado por el valor
None
(equivalente a null en otros lenguajes)
Colecciones
Las estructuras de colección permiten agrupar múltiples valores:
- list: Secuencias ordenadas y mutables (
[1, 2, 3]
) - tuple: Secuencias ordenadas e inmutables (
(1, 2, 3)
) - dict: Pares clave-valor (
{"nombre": "Ana", "edad": 25}
) - set: Conjuntos no ordenados de elementos únicos (
{1, 2, 3}
)
Estilo de Código en Python
Python promueve un estilo de escritura claro y consistente:
- snake_case para variables y funciones
- PascalCase (primera letra mayúscula) para clases
- Indentación con espacios (4 espacios es lo estándar)
- Uso semántico adecuado de estructuras
Este estilo está codificado en el PEP 8, la guía oficial de estilo para Python.
Variables
Una variable es un espacio para almacenar datos modificables en la memoria del ordenador. En Python, se definen con la sintaxis:
nombre_de_la_variable = valor_de_la_variable
Python utiliza tipado dinámico, lo que significa que no es necesario declarar el tipo de variable explícitamente. El tipo se infiere en tiempo de ejecución y puede cambiar.
Métodos de Manipulación de Variables
En Python, toda variable se considera un objeto. Los objetos tienen métodos (funciones asociadas) que permiten realizar operaciones sobre ellos:
variable.metodo() # Sin parámetros
variable.metodo(parametro) # Con parámetros
Operaciones entre Tipos
Python permite diversas operaciones entre tipos de datos:
Operadores Aritméticos
+
: Suma (también concatenación para strings y listas)*
: Multiplicación (también repetición para strings y listas)-
: Resta/
: División (resultado float)//
: División entera (resultado int)%
: Módulo (resto de división)**
: Potencia
Ejemplos de Operaciones entre Tipos
# Operaciones con booleanos
True + True # 2 (True se convierte a 1)
True * False # 0 (False se convierte a 0)
# Operaciones con enteros
5 + 3 # 8
5 * 3 # 15
# Operaciones con strings
"Hola" + " mundo" # "Hola mundo"
"Hola" * 3 # "HolaHolaHola"
# Operaciones mixtas
"Repetir " * 3 # "Repetir Repetir Repetir "
"Edad: " + str(25) # "Edad: 25" (requiere conversión explícita)
Manipulación de Strings
Los strings tienen numerosos métodos útiles:
texto = "python es genial"
texto.capitalize() # "Python es genial"
texto.upper() # "PYTHON ES GENIAL"
texto.lower() # "python es genial"
texto.swapcase() # "PYTHON ES GENIAL"
texto.center(20) # " python es genial "
texto.count("n") # 2
texto.find("es") # 7
texto.startswith("py") # True
texto.endswith("ial") # True
Manipulación de Listas
Las listas son colecciones ordenadas y mutables:
colores = ["rojo", "verde", "azul"]
# Añadir elementos
colores.append("amarillo") # ["rojo", "verde", "azul", "amarillo"]
colores.insert(1, "naranja") # ["rojo", "naranja", "verde", "azul", "amarillo"]
# Eliminar elementos
colores.remove("verde") # ["rojo", "naranja", "azul", "amarillo"]
eliminado = colores.pop(1) # eliminado = "naranja", colores = ["rojo", "azul", "amarillo"]
# Ordenar
colores.sort() # ["amarillo", "azul", "rojo"]
colores.reverse() # ["rojo", "azul", "amarillo"]
Trabajando con Diccionarios
Los diccionarios almacenan pares clave-valor:
persona = {"nombre": "Carlos", "edad": 30, "ciudad": "Santiago"}
# Acceder a valores
nombre = persona["nombre"] # Carlos
edad = persona.get("edad") # 30 (método más seguro)
# Añadir/modificar valores
persona["profesion"] = "Ingeniero"
persona["edad"] = 31
# Eliminar valores
del persona["ciudad"]
profesion = persona.pop("profesion") # Elimina y devuelve el valor
# Iterar sobre un diccionario
for clave in persona:
print(f"{clave}: {persona[clave]}")
for clave, valor in persona.items():
print(f"{clave}: {valor}")
Definición de Funciones
Las funciones permiten encapsular código reutilizable:
def saludar(nombre):
return f"Hola, {nombre}!"
def calcular_area_rectangulo(base, altura):
return base * altura
# Función con valor por defecto
def saludar_formal(nombre, titulo="Sr./Sra."):
return f"Saludos, {titulo} {nombre}"
# Función que pide input al usuario
def obtener_nombre():
return input("Introduce tu nombre: ")
Iteración
Python ofrece varias formas de iterar sobre colecciones:
# Iterar sobre una lista
frutas = ["manzana", "banana", "cereza"]
for fruta in frutas:
print(fruta)
# Iterar con índices
for indice, fruta en enumerate(frutas):
print(f"Índice {indice}: {fruta}")
# Iterar sobre un diccionario
persona = {"nombre": "Ana", "edad": 25}
for clave, valor en persona.items():
print(f"{clave}: {valor}")
Clases y Objetos
Python es un lenguaje orientado a objetos que permite crear clases personalizadas:
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def saludar(self):
return f"Hola, me llamo {self.nombre} y tengo {self.edad} años"
# Crear un objeto
ana = Persona("Ana", 25)
print(ana.saludar())
Dataclasses (Python 3.7+)
Las dataclasses simplifican la creación de clases centradas en datos:
from dataclasses import dataclass
@dataclass
class Punto:
x: float
y: float
def distancia_al_origen(self):
return (self.x ** 2 + self.y ** 2) ** 0.5
punto = Punto(3.0, 4.0)
print(punto.distancia_al_origen()) # 5.0
Proyecto Práctico: Reemplazo de Emojis
Como ejercicio práctico, podemos crear un programa que reemplace emojis textuales por sus equivalentes en una conversación:
def reemplazar_emojis(texto, diccionario_emojis):
for emoji_texto, emoji_real en diccionario_emojis.items():
texto = texto.replace(emoji_texto, emoji_real)
return texto
# Diccionario de emojis
emojis = {
":)": "😊",
":(": "😢",
":D": "😃",
";)": "😉",
":P": "😛"
}
# Conversación de ejemplo
conversacion = [
"Hola! Cómo estás? :)",
"Muy bien! :D Y tú?",
"Un poco cansado :( pero bien ;)",
"Te entiendo :P"
]
# Procesar la conversación
conversacion_procesada = [reemplazar_emojis(linea, emojis) for linea en conversacion]
# Mostrar resultado
for linea en conversacion_procesada:
print(linea)