Estructuras de Datos en Python

Las Estructuras de Datos en Python proporcionan una base fundamental para almacenar y manipular datos de manera eficiente. Cada tipo de estructura tiene características únicas, optimizadas para diferentes casos de uso. Python ofrece múltiples estructuras de datos como listas, tuplas, diccionarios y conjuntos. A continuación, detallo cada una de estas estructuras en profundidad.

1. Listas y Tuplas
Empecemos hablando de las Listas

Las listas en Python son estructuras de datos ordenadas, mutables y dinámicas que permiten almacenar elementos de cualquier tipo. Se representan mediante corchetes [], y sus elementos se pueden modificar una vez creados.

Características principales:

  • Mutable: Sus elementos se pueden cambiar después de su creación.
  • Ordenada: Mantiene el orden de inserción.
  • Permite duplicados: Puede contener elementos repetidos

Ejemplo creación de listas:

# Lista vacía
mi_lista = []

# Lista con elementos de diferentes tipos
mi_lista = [1, "Python", 3.14, True]

Indexación y Slicing

Las listas admiten indexación (acceder a elementos mediante su posición) y slicing (obtener sublistas).

mi_lista = [10, 20, 30, 40, 50]

# Acceder al primer elemento
print(mi_lista[0])  # Salida: 10

# Obtener los últimos dos elementos
print(mi_lista[-2:])  # Salida: [40, 50]

Modificación de Elementos

Las listas se pueden modificar reemplazando elementos en posiciones específicas.

mi_lista = [1, 2, 3]
mi_lista[1] = 10
print(mi_lista)  # Salida: [1, 10, 3]

Métodos Comunes de las Listas

  • append(x): Agrega x al final de la lista.
  • extend(iterable): Extiende la lista con los elementos de un iterable.
  • insert(i, x): Inserta x en la posición i.
  • remove(x): Elimina la primera aparición de x.
  • pop(i): Elimina el elemento en la posición i y lo retorna.
  • sort(): Ordena la lista en orden ascendente (modifica la lista).

mi_lista = [3, 1, 2]
mi_lista.append(4)      # Agrega 4 al final
mi_lista.sort()         # Ordena la lista
print(mi_lista)         # Salida: [1, 2, 3, 4]

Y… ¿Las Tuplas?

Las tuplas son similares a las listas, pero son inmutables (no se pueden modificar después de su creación). Las tuplas se representan mediante paréntesis (). Al ser inmutables, son útiles para almacenar datos constantes y mejorar el rendimiento en ciertas operaciones.

Características principales:

  • Inmutable: Una vez creada, no se puede modificar.
  • Ordenada: Mantiene el orden de inserción.
  • Permite duplicados: Puede contener elementos repetidos.

Ejemplo de creación:

# Tupla vacía
mi_tupla = ()

# Tupla con elementos
mi_tupla = (1, "Python", 3.14)

Indexación y Slicing

Al igual que las listas, las tuplas admiten indexación y slicing.

mi_tupla = (10, 20, 30)

# Acceder al primer elemento
print(mi_tupla[0])  # Salida: 10

# Obtener una sub-tupla
print(mi_tupla[1:])  # Salida: (20, 30)

Operaciones Comunes de las Tuplas

Dado que las tuplas son inmutables, no poseen métodos para modificar sus elementos. Sin embargo, ofrecen métodos útiles como count() y index().

mi_tupla = (1, 2, 3, 2)

# Contar cuántas veces aparece el número 2
print(mi_tupla.count(2))  # Salida: 2

# Encontrar la posición del número 3
print(mi_tupla.index(3))  # Salida: 2

2. Diccionarios

Los diccionarios son estructuras de datos que almacenan pares de clave-valor, donde cada clave es única y apunta a un valor. En CPython 3.6 los diccionarios comenzaron a preservar el orden de inserción como detalle de implementación. Desde Python 3.7, este comportamiento forma parte de la especificación del lenguaje.

Características principales:

  • Mutable: Los valores pueden modificarse después de su creación.
  • Mantiene el orden de inserción: desde Python 3.7, el orden de inserción forma parte de la especificación del lenguaje.
  • Claves únicas: Cada clave debe ser única, pero los valores pueden repetirse.

Ejemplo de creación de un Diccionario:

# Diccionario vacío
mi_diccionario = {}

# Diccionario con datos
mi_diccionario = {"nombre": "Python", "version": 3.9}

Acceso a Elementos

# Acceder al valor de la clave 'nombre'
print(mi_diccionario["nombre"])  # Salida: Python

Modificación de Elementos

mi_diccionario["version"] = 3.10
print(mi_diccionario)  # Salida: {'nombre': 'Python', 'version': 3.10}

Métodos Comunes de los Diccionarios

  • get(clave, valor_defecto): Devuelve el valor de la clave, o el valor por defecto si la clave no existe.
  • keys(): Devuelve una vista de las claves.
  • values(): Devuelve una vista de los valores.
  • items(): Devuelve una vista de los pares clave-valor.
  • pop(clave): Elimina y devuelve el valor de la clave.
  • update(otro_diccionario): Actualiza el diccionario con pares clave-valor de otro diccionario.

mi_diccionario = {"a": 1, "b": 2}

# Obtener el valor asociado a la clave 'a'
print(mi_diccionario.get("a"))  # Salida: 1

# Obtener todas las claves
print(mi_diccionario.keys())  # Salida: dict_keys(['a', 'b'])