Listas en Python: Creación, Manipulación y Métodos

Estructuras de datos fundamentales: creación, indexación, slicing y métodos de manipulación

Módulo 1 ⏱️ 2 horas 📋 Listas 🔍 Indexación ✂️ Slicing

Introducción

Las listas son una de las estructuras de datos más fundamentales y versátiles en Python. Como estudiantes de ingeniería, dominar las listas es esencial para el procesamiento de datos, algoritmos y desarrollo de aplicaciones. Una lista es una colección ordenada y mutable de elementos que pueden ser de diferentes tipos de datos.

Objetivos de aprendizaje
  • Crear y inicializar listas usando diferentes métodos y técnicas
  • Aplicar indexación y slicing para acceder y modificar elementos
  • Utilizar métodos de lista para manipular datos eficientemente
  • Implementar operaciones avanzadas para resolver problemas

Creación e Inicialización de Listas

Las listas en Python se pueden crear de múltiples formas. La más básica es usando corchetes cuadrados []. Podemos crear listas vacías, con elementos predefinidos, o usando funciones como list() y range().

Características de las listas:
  • Mutables: Se pueden modificar después de la creación
  • Ordenadas: Mantienen el orden de inserción
  • Heterogéneas: Pueden contener diferentes tipos de datos
Creación básica de listas Copiar
# Lista vacía
lista_vacia = []
print('Lista vacía:', lista_vacia)

# Lista con elementos
numeros = [1, 2, 3, 4, 5]
print('Lista de números:', numeros)

# Lista mixta
mixta = [1, 'Python', 3.14, True]
print('Lista mixta:', mixta)

# Lista usando constructor
lista_constructor = list([10, 20, 30])
print('Lista con constructor:', lista_constructor)
Lista vacía: []
Lista de números: [1, 2, 3, 4, 5]
Lista mixta: [1, 'Python', 3.14, True]
Lista con constructor: [10, 20, 30]

Métodos avanzados de creación

Creación con range() y list comprehensions Copiar
# Usando range()
numeros_range = list(range(1, 6))
print('Con range():', numeros_range)

# List comprehension básica
cuadrados = [x**2 for x in range(1, 6)]
print('Cuadrados:', cuadrados)

# List comprehension con condición
pares = [x for x in range(1, 11) if x % 2 == 0]
print('Números pares:', pares)
Con range(): [1, 2, 3, 4, 5]
Cuadrados: [1, 4, 9, 16, 25]
Números pares: [2, 4, 6, 8, 10]

Indexación y Acceso a Elementos

La indexación en Python comienza en 0 y permite acceso directo a elementos individuales. También soporta indexación negativa, donde -1 representa el último elemento. La indexación es fundamental para algoritmos de búsqueda, ordenamiento y manipulación de datos.

Importante

Intentar acceder a un índice que no existe generará un IndexError. Siempre verifica la existencia usando len() o in.

Indexación básica y negativa Copiar
lenguajes = ['Python', 'Java', 'C++', 'JavaScript', 'Go']

# Indexación positiva
print('Primer elemento:', lenguajes[0])
print('Tercer elemento:', lenguajes[2])

# Indexación negativa
print('Último elemento:', lenguajes[-1])
print('Penúltimo elemento:', lenguajes[-2])

# Longitud de la lista
print('Longitud:', len(lenguajes))
Primer elemento: Python
Tercer elemento: C++
Último elemento: Go
Penúltimo elemento: JavaScript
Longitud: 5

Verificación segura y manejo de errores

Verificación de existencia y manejo de errores Copiar
datos = [10, 20, 30, 40, 50]

# Verificar existencia
if 30 in datos:
    print('30 está en la lista')
    indice = datos.index(30)
    print('Posición de 30:', indice)

# Acceso seguro
if len(datos) > 5:
    print('Elemento en posición 5:', datos[5])
else:
    print('La lista no tiene 6 elementos')
30 está en la lista
Posición de 30: 2
La lista no tiene 6 elementos

Slicing: Extracción de Sublistas

El slicing es una técnica poderosa para extraer porciones de listas usando la sintaxis [inicio:fin:paso]. Esta operación no modifica la lista original, sino que crea una nueva vista. Es especialmente útil en procesamiento de señales, análisis de datos y algoritmos que requieren trabajar con subsecuencias.

Sintaxis del slicing:
  • lista[inicio:fin] - Desde inicio hasta fin-1
  • lista[inicio:fin:paso] - Con saltos definidos
  • lista[::-1] - Inversión completa
Slicing básico y avanzado Copiar
numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Slicing básico
print('Primeros 5:', numeros[:5])
print('Últimos 3:', numeros[-3:])
print('Del 2 al 7:', numeros[2:8])

# Con paso
print('Números pares (paso 2):', numeros[::2])
print('Reverso:', numeros[::-1])
print('Del 1 al 8, paso 2:', numeros[1:9:2])
Primeros 5: [0, 1, 2, 3, 4]
Últimos 3: [7, 8, 9]
Del 2 al 7: [2, 3, 4, 5, 6, 7]
Números pares (paso 2): [0, 2, 4, 6, 8]
Reverso: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Del 1 al 8, paso 2: [1, 3, 5, 7]

Slicing para modificación

Slicing para modificación Copiar
datos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('Lista original:', datos)

# Modificar slice
datos[2:5] = [30, 40, 50]
print('Después de modificar [2:5]:', datos)

# Insertar elementos
datos[3:3] = [35, 36]
print('Después de insertar:', datos)

# Eliminar slice
del datos[1:3]
print('Después de eliminar [1:3]:', datos)
Lista original: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Después de modificar [2:5]: [1, 2, 30, 40, 50, 6, 7, 8, 9, 10]
Después de insertar: [1, 2, 30, 35, 36, 40, 50, 6, 7, 8, 9, 10]
Después de eliminar [1:3]: [1, 35, 36, 40, 50, 6, 7, 8, 9, 10]

Métodos Fundamentales de Listas

Python proporciona métodos integrados para manipular listas de manera eficiente. Los métodos más importantes incluyen append(), extend(), insert(), remove(), pop(), sort() y reverse().

Métodos mutables

Todos estos métodos modifican la lista original. Es importante considerar esto en el diseño de algoritmos complejos.

Métodos de adición y eliminación Copiar
frutas = ['manzana', 'banana']
print('Lista inicial:', frutas)

# Agregar elementos
frutas.append('naranja')
print('Después de append:', frutas)

frutas.insert(1, 'uva')
print('Después de insert:', frutas)

frutas.extend(['kiwi', 'mango'])
print('Después de extend:', frutas)

# Eliminar elementos
frutas.remove('banana')
print('Después de remove:', frutas)

eliminado = frutas.pop()
print('Elemento eliminado con pop:', eliminado)
print('Lista final:', frutas)
Lista inicial: ['manzana', 'banana']
Después de append: ['manzana', 'banana', 'naranja']
Después de insert: ['manzana', 'uva', 'banana', 'naranja']
Después de extend: ['manzana', 'uva', 'banana', 'naranja', 'kiwi', 'mango']
Después de remove: ['manzana', 'uva', 'naranja', 'kiwi', 'mango']
Elemento eliminado con pop: mango
Lista final: ['manzana', 'uva', 'naranja', 'kiwi']

Métodos de ordenamiento y búsqueda

Métodos de ordenamiento y búsqueda Copiar
numeros = [3, 1, 4, 1, 5, 9, 2, 6]
print('Lista original:', numeros)

# Información sobre elementos
print('Cantidad de 1s:', numeros.count(1))
print('Índice del 4:', numeros.index(4))

# Ordenamiento
numeros.sort()
print('Lista ordenada:', numeros)

# Reverso
numeros.reverse()
print('Lista en reverso:', numeros)

# Copia
copia = numeros.copy()
print('Copia de la lista:', copia)
Lista original: [3, 1, 4, 1, 5, 9, 2, 6]
Cantidad de 1s: 2
Índice del 4: 2
Lista ordenada: [1, 1, 2, 3, 4, 5, 6, 9]
Lista en reverso: [9, 6, 5, 4, 3, 2, 1, 1]
Copia de la lista: [9, 6, 5, 4, 3, 2, 1, 1]

Operaciones Avanzadas y Casos de Uso

Las listas en Python soportan operaciones avanzadas como concatenación (+), repetición (*), y comparaciones. También se pueden anidar para crear estructuras bidimensionales útiles en matrices y algoritmos complejos.

Operaciones avanzadas:
  • Concatenación: Unir listas con el operador +
  • Repetición: Multiplicar listas con el operador *
  • Anidación: Listas dentro de listas (matrices)
Operaciones con listas y listas anidadas Copiar
# Operaciones básicas
lista1 = [1, 2, 3]
lista2 = [4, 5, 6]

# Concatenación
concatenada = lista1 + lista2
print('Concatenación:', concatenada)

# Repetición
repetida = [0] * 5
print('Repetición:', repetida)

# Lista anidada (matriz)
matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print('Matriz 3x3:', matriz)
print('Elemento [1][2]:', matriz[1][2])

# Aplanar matriz
plana = [elemento for fila in matriz for elemento in fila]
print('Matriz aplanada:', plana)
Concatenación: [1, 2, 3, 4, 5, 6]
Repetición: [0, 0, 0, 0, 0]
Matriz 3x3: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Elemento [1][2]: 6
Matriz aplanada: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Aplicación práctica: Análisis de datos de sensores

Aplicación práctica: análisis de datos de sensores Copiar
# Simulación de datos de sensores de temperatura
temperaturas = [22.5, 23.1, 24.8, 26.2, 25.5, 23.9, 22.1, 21.8]

# Análisis básico
promedio = sum(temperaturas) / len(temperaturas)
max_temp = max(temperaturas)
min_temp = min(temperaturas)

print(f'Promedio: {promedio:.2f}°C')
print(f'Máxima: {max_temp}°C')
print(f'Mínima: {min_temp}°C')

# Filtrar temperaturas altas
temps_altas = [temp for temp in temperaturas if temp > promedio]
print(f'Temperaturas sobre promedio: {temps_altas}')

# Clasificar lecturas
clasificacion = ['Normal' if temp < 25 else 'Alta' for temp in temperaturas]
print(f'Clasificación: {clasificacion}')
Promedio: 23.74°C
Máxima: 26.2°C
Mínima: 21.8°C
Temperaturas sobre promedio: [24.8, 26.2, 25.5]
Clasificación: ['Normal', 'Normal', 'Normal', 'Alta', 'Alta', 'Normal', 'Normal', 'Normal']

Ejercicios Prácticos

Gestor de Inventario
BÁSICO

Crear un programa que gestione un inventario de productos usando listas. Debe permitir agregar productos, eliminar por nombre, mostrar inventario ordenado y calcular estadísticas básicas.

Pista:

Usa métodos como append(), remove(), sort() y funciones como len(), sum()

Análisis de Calificaciones
BÁSICO

Desarrollar un sistema que procese calificaciones de estudiantes. Calcular promedio, encontrar calificaciones extremas y determinar aprobados (≥ 70).

Pista:

Utiliza list comprehensions y funciones max(), min(), sum()

Procesamiento de Señales
INTERMEDIO

Implementar funciones para procesar una señal digital: filtrado de ruido, detección de picos y estadísticas avanzadas.

Pista:

Usa slicing para ventanas deslizantes y list comprehensions con condiciones

Sistema de Recomendaciones
INTERMEDIO

Crear un sistema básico que compare listas de preferencias y sugiera elementos basados en similitudes.

Pista:

Convierte listas a conjuntos para operaciones de intersección y diferencia

Resumen y Próximos Pasos

Las listas son estructuras de datos fundamentales que forman la base para conceptos más avanzados en Python. Hemos cubierto desde la creación básica hasta operaciones complejas, proporcionando las herramientas necesarias para abordar problemas reales de ingeniería.

Próxima lección

Exploraremos tuplas en Python: estructuras inmutables y sus casos de uso prácticos.