7. Listas y Colecciones de Datos
📋 7.1 ¿Qué es una lista y cómo se crea?
Section titled “📋 7.1 ¿Qué es una lista y cómo se crea?”Concepto de lista
Section titled “Concepto de lista”Una lista es una estructura de datos que permite almacenar múltiples valores en una sola variable. Es una colección ordenada, mutable (modificable) y que permite elementos duplicados.
Características de las listas
Section titled “Características de las listas”| Característica | Descripción |
|---|---|
| Ordenadas | Los elementos mantienen el orden en que fueron agregados |
| Mutables | Se pueden modificar después de su creación |
| Indexadas | Cada elemento tiene una posición (índice) comenzando desde 0 |
| Heterogéneas | Pueden contener diferentes tipos de datos |
| Duplicados | Puede haber elementos repetidos |
Sintaxis de creación
Section titled “Sintaxis de creación”# Lista vacíalista = []
# Lista con elementoslista = [elemento1, elemento2, elemento3]
# Con constructor list()lista = list()Propósito de las listas
Section titled “Propósito de las listas”- Agrupar datos relacionados: Mantener información organizada
- Procesamiento secuencial: Iterar sobre múltiples valores
- Almacenamiento dinámico: Agregar o eliminar elementos según necesidad
- Colecciones ordenadas: Mantener secuencia específica de elementos
Ejemplo: Crear listas
Section titled “Ejemplo: Crear listas”# Lista vacíafrutas = []print(frutas) # []
# Lista con elementosfrutas = ["manzana", "pera", "uva"]print(frutas) # ['manzana', 'pera', 'uva']
# Lista con diferentes tiposmixta = [1, "texto", 3.14, True]print(mixta) # [1, 'texto', 3.14, True]
# Lista de númerosnumeros = [1, 2, 3, 4, 5]print(numeros) # [1, 2, 3, 4, 5]Ejemplo: Listas con range()
Section titled “Ejemplo: Listas con range()”# Crear lista desde rangenumeros = list(range(1, 6))print(numeros) # [1, 2, 3, 4, 5]
# Números pares del 0 al 10pares = list(range(0, 11, 2))print(pares) # [0, 2, 4, 6, 8, 10]Ejemplo: Listas anidadas
Section titled “Ejemplo: Listas anidadas”# Lista de listas (matriz)matriz = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]print(matriz)print(matriz[0]) # [1, 2, 3]print(matriz[1][1]) # 5🔍 7.2 Acceso por índice, modificación y recorrido
Section titled “🔍 7.2 Acceso por índice, modificación y recorrido”Acceso por índice
Section titled “Acceso por índice”Los elementos de una lista se acceden mediante su índice (posición). Python usa indexación basada en cero: el primer elemento está en la posición 0.
| Tipo de índice | Descripción |
|---|---|
| Positivos | Comienzan desde 0 (inicio de la lista) |
| Negativos | Comienzan desde -1 (final de la lista) |
Slicing (rebanado)
Section titled “Slicing (rebanado)”Permite obtener sublistas usando la sintaxis lista[inicio:fin:paso]:
| Parámetro | Descripción |
|---|---|
| inicio | Índice donde comienza (incluido) |
| fin | Índice donde termina (excluido) |
| paso | Incremento entre elementos |
Modificación
Section titled “Modificación”Las listas son mutables, por lo que sus elementos pueden modificarse directamente asignando nuevos valores a índices específicos.
Recorrido
Section titled “Recorrido”Se puede iterar sobre una lista usando bucles for o while, accediendo a cada elemento secuencialmente.
Ejemplo: Acceso por índice
Section titled “Ejemplo: Acceso por índice”frutas = ["manzana", "pera", "uva", "naranja", "kiwi"]
# Índices positivosprint(frutas[0]) # manzana (primer elemento)print(frutas[2]) # uvaprint(frutas[4]) # kiwi (último elemento)
# Índices negativosprint(frutas[-1]) # kiwi (último)print(frutas[-2]) # naranja (penúltimo)print(frutas[-5]) # manzana (primero desde el final)Ejemplo: Slicing (rebanado)
Section titled “Ejemplo: Slicing (rebanado)”numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Obtener sublistaprint(numeros[2:5]) # [2, 3, 4]print(numeros[:3]) # [0, 1, 2] (desde inicio)print(numeros[7:]) # [7, 8, 9] (hasta el final)print(numeros[::2]) # [0, 2, 4, 6, 8] (cada 2)print(numeros[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (invertida)Ejemplo: Modificación de elementos
Section titled “Ejemplo: Modificación de elementos”frutas = ["manzana", "pera", "uva"]
# Modificar un elementofrutas[1] = "plátano"print(frutas) # ['manzana', 'plátano', 'uva']
# Modificar múltiples elementosfrutas[0:2] = ["fresa", "sandía"]print(frutas) # ['fresa', 'sandía', 'uva']
# Modificar con índice negativofrutas[-1] = "melón"print(frutas) # ['fresa', 'sandía', 'melón']Ejemplo: Recorrido de listas
Section titled “Ejemplo: Recorrido de listas”frutas = ["manzana", "pera", "uva"]
# Recorrer con forfor fruta in frutas: print(fruta)
# Recorrer con índicefor i in range(len(frutas)): print(f"{i}: {frutas[i]}")
# Recorrer con enumeratefor indice, fruta in enumerate(frutas): print(f"{indice}: {fruta}")🛠️ 7.3 Métodos comunes: append(), remove(), sort(), len()
Section titled “🛠️ 7.3 Métodos comunes: append(), remove(), sort(), len()”Métodos principales de listas
Section titled “Métodos principales de listas”| Método | Descripción |
|---|---|
append(elemento) | Agrega un elemento al final de la lista |
insert(índice, elemento) | Inserta un elemento en una posición específica |
remove(elemento) | Elimina la primera ocurrencia de un elemento |
pop(índice) | Elimina y retorna el elemento en el índice (por defecto el último) |
clear() | Elimina todos los elementos |
sort() | Ordena la lista in-place (modifica la original) |
reverse() | Invierte el orden de los elementos |
count(elemento) | Cuenta cuántas veces aparece un elemento |
index(elemento) | Retorna el índice de la primera ocurrencia |
Función len()
Section titled “Función len()”len(lista): Retorna la cantidad de elementos en la lista (no es un método, es una función).
Ejemplo: append()
Section titled “Ejemplo: append()”frutas = ["manzana", "pera"]
# Agregar al finalfrutas.append("uva")print(frutas) # ['manzana', 'pera', 'uva']
frutas.append("naranja")print(frutas) # ['manzana', 'pera', 'uva', 'naranja']Ejemplo: insert() y remove()
Section titled “Ejemplo: insert() y remove()”frutas = ["manzana", "pera", "uva"]
# Insertar en posición específicafrutas.insert(1, "plátano")print(frutas) # ['manzana', 'plátano', 'pera', 'uva']
# Eliminar elemento específicofrutas.remove("pera")print(frutas) # ['manzana', 'plátano', 'uva']Ejemplo: pop() y clear()
Section titled “Ejemplo: pop() y clear()”numeros = [1, 2, 3, 4, 5]
# Eliminar y obtener último elementoultimo = numeros.pop()print(ultimo) # 5print(numeros) # [1, 2, 3, 4]
# Eliminar elemento en índice específicosegundo = numeros.pop(1)print(segundo) # 2print(numeros) # [1, 3, 4]
# Limpiar toda la listanumeros.clear()print(numeros) # []Ejemplo: sort() y reverse()
Section titled “Ejemplo: sort() y reverse()”# Ordenar númerosnumeros = [5, 2, 8, 1, 9]numeros.sort()print(numeros) # [1, 2, 5, 8, 9]
# Ordenar en reversanumeros.sort(reverse=True)print(numeros) # [9, 8, 5, 2, 1]
# Ordenar cadenasfrutas = ["uva", "manzana", "pera"]frutas.sort()print(frutas) # ['manzana', 'pera', 'uva']
# Invertir ordenfrutas.reverse()print(frutas) # ['uva', 'pera', 'manzana']Ejemplo: len(), count() e index()
Section titled “Ejemplo: len(), count() e index()”frutas = ["manzana", "pera", "uva", "pera", "kiwi"]
# Longitud de la listaprint(len(frutas)) # 5
# Contar ocurrenciasprint(frutas.count("pera")) # 2print(frutas.count("uva")) # 1
# Encontrar índiceprint(frutas.index("uva")) # 2print(frutas.index("pera")) # 1 (primera ocurrencia)🗂️ 7.4 Introducción a tuplas, sets y diccionarios (nivel básico)
Section titled “🗂️ 7.4 Introducción a tuplas, sets y diccionarios (nivel básico)”Resumen de colecciones
Section titled “Resumen de colecciones”| Colección | Sintaxis | Ordenada | Mutable | Duplicados |
|---|---|---|---|---|
| Tupla | () | ✅ Sí | ❌ No | ✅ Sí |
| Set | {} | ❌ No | ✅ Sí | ❌ No |
| Diccionario | {k:v} | ✅ Sí (3.7+) | ✅ Sí | Claves únicas |
Tuplas
Section titled “Tuplas”- Definición: Colección ordenada e inmutable (no se puede modificar)
- Sintaxis:
tupla = (elemento1, elemento2) - Uso: Datos que no deben cambiar, retorno múltiple de funciones
Sets (Conjuntos)
Section titled “Sets (Conjuntos)”- Definición: Colección no ordenada y sin elementos duplicados
- Sintaxis:
conjunto = {elemento1, elemento2} - Uso: Eliminar duplicados, operaciones matemáticas de conjuntos
Diccionarios
Section titled “Diccionarios”- Definición: Colección de pares clave-valor
- Sintaxis:
diccionario = {clave1: valor1, clave2: valor2} - Uso: Mapear relaciones, búsquedas rápidas por clave
Ejemplo: Tuplas
Section titled “Ejemplo: Tuplas”# Crear tuplacoordenadas = (10, 20)print(coordenadas) # (10, 20)
# Acceder por índiceprint(coordenadas[0]) # 10print(coordenadas[1]) # 20
# Las tuplas son inmutables# coordenadas[0] = 15 # Error: no se puede modificar
# Desempaquetar tuplax, y = coordenadasprint(f"x={x}, y={y}") # x=10, y=20
# Tupla de un elemento (requiere coma)tupla_uno = (5,)print(type(tupla_uno)) # <class 'tuple'>Ejemplo: Sets (Conjuntos)
Section titled “Ejemplo: Sets (Conjuntos)”# Crear setfrutas = {"manzana", "pera", "uva"}print(frutas) # {'manzana', 'pera', 'uva'}
# Eliminar duplicados automáticamentenumeros = {1, 2, 2, 3, 3, 3, 4}print(numeros) # {1, 2, 3, 4}
# Agregar elementofrutas.add("naranja")print(frutas)
# Eliminar elementofrutas.remove("pera")print(frutas)
# Operaciones de conjuntosa = {1, 2, 3, 4}b = {3, 4, 5, 6}
print(a | b) # Unión: {1, 2, 3, 4, 5, 6}print(a & b) # Intersección: {3, 4}print(a - b) # Diferencia: {1, 2}Ejemplo: Diccionarios
Section titled “Ejemplo: Diccionarios”# Crear diccionarioestudiante = { "nombre": "Ana", "edad": 20, "carrera": "Ingeniería"}print(estudiante)
# Acceder por claveprint(estudiante["nombre"]) # Anaprint(estudiante["edad"]) # 20
# Agregar o modificarestudiante["ciudad"] = "Madrid"estudiante["edad"] = 21print(estudiante)
# Obtener claves y valoresprint(estudiante.keys()) # dict_keys(['nombre', 'edad', 'carrera', 'ciudad'])print(estudiante.values()) # dict_values(['Ana', 21, 'Ingeniería', 'Madrid'])
# Iterar sobre diccionariofor clave, valor in estudiante.items(): print(f"{clave}: {valor}")⚖️ 7.5 Comparación entre listas, tuplas y conjuntos
Section titled “⚖️ 7.5 Comparación entre listas, tuplas y conjuntos”Tabla comparativa
Section titled “Tabla comparativa”| Característica | Lista | Tupla | Set |
|---|---|---|---|
| Sintaxis | [] | () | {} |
| Ordenada | ✅ Sí | ✅ Sí | ❌ No |
| Mutable | ✅ Sí | ❌ No | ✅ Sí |
| Duplicados | ✅ Sí | ✅ Sí | ❌ No |
| Indexable | ✅ Sí | ✅ Sí | ❌ No |
| Uso principal | Colecciones modificables | Datos inmutables | Eliminar duplicados |
Cuándo usar cada una
Section titled “Cuándo usar cada una”- Listas: Cuando necesitas una colección ordenada que puede cambiar
- Tuplas: Cuando los datos no deben modificarse (coordenadas, configuración)
- Sets: Cuando necesitas elementos únicos o realizar operaciones de conjuntos
- Diccionarios: Cuando necesitas mapear claves a valores
Ejemplo: Comparación práctica
Section titled “Ejemplo: Comparación práctica”# LISTA - Mutable y ordenadalista = [1, 2, 3, 2, 1]lista.append(4)lista[0] = 10print(lista) # [10, 2, 3, 2, 1, 4]
# TUPLA - Inmutable y ordenadatupla = (1, 2, 3, 2, 1)# tupla.append(4) # Error: no tiene método append# tupla[0] = 10 # Error: no se puede modificarprint(tupla) # (1, 2, 3, 2, 1)
# SET - Mutable pero sin orden ni duplicadosconjunto = {1, 2, 3, 2, 1}conjunto.add(4)# conjunto[0] # Error: no es indexableprint(conjunto) # {1, 2, 3, 4}Ejemplo: Conversión entre tipos
Section titled “Ejemplo: Conversión entre tipos”# Lista a tuplalista = [1, 2, 3]tupla = tuple(lista)print(tupla) # (1, 2, 3)
# Tupla a listatupla = (4, 5, 6)lista = list(tupla)print(lista) # [4, 5, 6]
# Lista a set (elimina duplicados)lista = [1, 2, 2, 3, 3, 3]conjunto = set(lista)print(conjunto) # {1, 2, 3}
# Set a listaconjunto = {1, 2, 3}lista = list(conjunto)print(lista) # [1, 2, 3]Ejemplo: Casos de uso específicos
Section titled “Ejemplo: Casos de uso específicos”# LISTA: Carrito de compras (puede cambiar)carrito = ["manzana", "pan", "leche"]carrito.append("huevos")carrito.remove("pan")print(f"Carrito: {carrito}")
# TUPLA: Coordenadas GPS (no deben cambiar)ubicacion = (40.4168, -3.7038) # Madridlatitud, longitud = ubicacionprint(f"Ubicación: {latitud}, {longitud}")
# SET: Etiquetas únicasetiquetas = {"python", "programación", "python", "tutorial"}print(f"Etiquetas: {etiquetas}") # Duplicados eliminados
# DICCIONARIO: Información de usuariousuario = { "id": 123, "nombre": "Ana", "email": "ana@example.com"}print(f"Usuario: {usuario['nombre']}")Ejemplo: Rendimiento y memoria
Section titled “Ejemplo: Rendimiento y memoria”import sys
# Comparar tamaño en memorialista = [1, 2, 3, 4, 5]tupla = (1, 2, 3, 4, 5)conjunto = {1, 2, 3, 4, 5}
print(f"Lista: {sys.getsizeof(lista)} bytes")print(f"Tupla: {sys.getsizeof(tupla)} bytes")print(f"Set: {sys.getsizeof(conjunto)} bytes")
# Las tuplas son más eficientes en memoria# Los sets son más rápidos para búsquedas🎯 Resumen de la lección
Section titled “🎯 Resumen de la lección”
🐝