Skip to content

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?”

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ísticaDescripción
OrdenadasLos elementos mantienen el orden en que fueron agregados
MutablesSe pueden modificar después de su creación
IndexadasCada elemento tiene una posición (índice) comenzando desde 0
HeterogéneasPueden contener diferentes tipos de datos
DuplicadosPuede haber elementos repetidos
# Lista vacía
lista = []
# Lista con elementos
lista = [elemento1, elemento2, elemento3]
# Con constructor list()
lista = list()
  • 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
Crear listas
# Lista vacía
frutas = []
print(frutas) # []
# Lista con elementos
frutas = ["manzana", "pera", "uva"]
print(frutas) # ['manzana', 'pera', 'uva']
# Lista con diferentes tipos
mixta = [1, "texto", 3.14, True]
print(mixta) # [1, 'texto', 3.14, True]
# Lista de números
numeros = [1, 2, 3, 4, 5]
print(numeros) # [1, 2, 3, 4, 5]
Listas con range()
# Crear lista desde range
numeros = list(range(1, 6))
print(numeros) # [1, 2, 3, 4, 5]
# Números pares del 0 al 10
pares = list(range(0, 11, 2))
print(pares) # [0, 2, 4, 6, 8, 10]
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”

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 índiceDescripción
PositivosComienzan desde 0 (inicio de la lista)
NegativosComienzan desde -1 (final de la lista)

Permite obtener sublistas usando la sintaxis lista[inicio:fin:paso]:

ParámetroDescripción
inicioÍndice donde comienza (incluido)
finÍndice donde termina (excluido)
pasoIncremento entre elementos

Las listas son mutables, por lo que sus elementos pueden modificarse directamente asignando nuevos valores a índices específicos.

Se puede iterar sobre una lista usando bucles for o while, accediendo a cada elemento secuencialmente.

Acceso por índice
frutas = ["manzana", "pera", "uva", "naranja", "kiwi"]
# Índices positivos
print(frutas[0]) # manzana (primer elemento)
print(frutas[2]) # uva
print(frutas[4]) # kiwi (último elemento)
# Índices negativos
print(frutas[-1]) # kiwi (último)
print(frutas[-2]) # naranja (penúltimo)
print(frutas[-5]) # manzana (primero desde el final)
Slicing
numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# Obtener sublista
print(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)
Modificación
frutas = ["manzana", "pera", "uva"]
# Modificar un elemento
frutas[1] = "plátano"
print(frutas) # ['manzana', 'plátano', 'uva']
# Modificar múltiples elementos
frutas[0:2] = ["fresa", "sandía"]
print(frutas) # ['fresa', 'sandía', 'uva']
# Modificar con índice negativo
frutas[-1] = "melón"
print(frutas) # ['fresa', 'sandía', 'melón']
Recorrido
frutas = ["manzana", "pera", "uva"]
# Recorrer con for
for fruta in frutas:
print(fruta)
# Recorrer con índice
for i in range(len(frutas)):
print(f"{i}: {frutas[i]}")
# Recorrer con enumerate
for 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étodoDescripció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

len(lista): Retorna la cantidad de elementos en la lista (no es un método, es una función).

append()
frutas = ["manzana", "pera"]
# Agregar al final
frutas.append("uva")
print(frutas) # ['manzana', 'pera', 'uva']
frutas.append("naranja")
print(frutas) # ['manzana', 'pera', 'uva', 'naranja']
insert() y remove()
frutas = ["manzana", "pera", "uva"]
# Insertar en posición específica
frutas.insert(1, "plátano")
print(frutas) # ['manzana', 'plátano', 'pera', 'uva']
# Eliminar elemento específico
frutas.remove("pera")
print(frutas) # ['manzana', 'plátano', 'uva']
pop() y clear()
numeros = [1, 2, 3, 4, 5]
# Eliminar y obtener último elemento
ultimo = numeros.pop()
print(ultimo) # 5
print(numeros) # [1, 2, 3, 4]
# Eliminar elemento en índice específico
segundo = numeros.pop(1)
print(segundo) # 2
print(numeros) # [1, 3, 4]
# Limpiar toda la lista
numeros.clear()
print(numeros) # []
sort() y reverse()
# Ordenar números
numeros = [5, 2, 8, 1, 9]
numeros.sort()
print(numeros) # [1, 2, 5, 8, 9]
# Ordenar en reversa
numeros.sort(reverse=True)
print(numeros) # [9, 8, 5, 2, 1]
# Ordenar cadenas
frutas = ["uva", "manzana", "pera"]
frutas.sort()
print(frutas) # ['manzana', 'pera', 'uva']
# Invertir orden
frutas.reverse()
print(frutas) # ['uva', 'pera', 'manzana']
len(), count(), index()
frutas = ["manzana", "pera", "uva", "pera", "kiwi"]
# Longitud de la lista
print(len(frutas)) # 5
# Contar ocurrencias
print(frutas.count("pera")) # 2
print(frutas.count("uva")) # 1
# Encontrar índice
print(frutas.index("uva")) # 2
print(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)”
ColecciónSintaxisOrdenadaMutableDuplicados
Tupla()✅ Sí❌ No✅ Sí
Set{}❌ No✅ Sí❌ No
Diccionario{k:v}✅ Sí (3.7+)✅ SíClaves únicas
  • 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
  • Definición: Colección no ordenada y sin elementos duplicados
  • Sintaxis: conjunto = {elemento1, elemento2}
  • Uso: Eliminar duplicados, operaciones matemáticas de conjuntos
  • Definición: Colección de pares clave-valor
  • Sintaxis: diccionario = {clave1: valor1, clave2: valor2}
  • Uso: Mapear relaciones, búsquedas rápidas por clave
Tuplas
# Crear tupla
coordenadas = (10, 20)
print(coordenadas) # (10, 20)
# Acceder por índice
print(coordenadas[0]) # 10
print(coordenadas[1]) # 20
# Las tuplas son inmutables
# coordenadas[0] = 15 # Error: no se puede modificar
# Desempaquetar tupla
x, y = coordenadas
print(f"x={x}, y={y}") # x=10, y=20
# Tupla de un elemento (requiere coma)
tupla_uno = (5,)
print(type(tupla_uno)) # <class 'tuple'>
Sets
# Crear set
frutas = {"manzana", "pera", "uva"}
print(frutas) # {'manzana', 'pera', 'uva'}
# Eliminar duplicados automáticamente
numeros = {1, 2, 2, 3, 3, 3, 4}
print(numeros) # {1, 2, 3, 4}
# Agregar elemento
frutas.add("naranja")
print(frutas)
# Eliminar elemento
frutas.remove("pera")
print(frutas)
# Operaciones de conjuntos
a = {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}
Diccionarios
# Crear diccionario
estudiante = {
"nombre": "Ana",
"edad": 20,
"carrera": "Ingeniería"
}
print(estudiante)
# Acceder por clave
print(estudiante["nombre"]) # Ana
print(estudiante["edad"]) # 20
# Agregar o modificar
estudiante["ciudad"] = "Madrid"
estudiante["edad"] = 21
print(estudiante)
# Obtener claves y valores
print(estudiante.keys()) # dict_keys(['nombre', 'edad', 'carrera', 'ciudad'])
print(estudiante.values()) # dict_values(['Ana', 21, 'Ingeniería', 'Madrid'])
# Iterar sobre diccionario
for 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”
CaracterísticaListaTuplaSet
Sintaxis[](){}
Ordenada✅ Sí✅ Sí❌ No
Mutable✅ Sí❌ No✅ Sí
Duplicados✅ Sí✅ Sí❌ No
Indexable✅ Sí✅ Sí❌ No
Uso principalColecciones modificablesDatos inmutablesEliminar duplicados
  • 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
Comparación
# LISTA - Mutable y ordenada
lista = [1, 2, 3, 2, 1]
lista.append(4)
lista[0] = 10
print(lista) # [10, 2, 3, 2, 1, 4]
# TUPLA - Inmutable y ordenada
tupla = (1, 2, 3, 2, 1)
# tupla.append(4) # Error: no tiene método append
# tupla[0] = 10 # Error: no se puede modificar
print(tupla) # (1, 2, 3, 2, 1)
# SET - Mutable pero sin orden ni duplicados
conjunto = {1, 2, 3, 2, 1}
conjunto.add(4)
# conjunto[0] # Error: no es indexable
print(conjunto) # {1, 2, 3, 4}
Conversiones
# Lista a tupla
lista = [1, 2, 3]
tupla = tuple(lista)
print(tupla) # (1, 2, 3)
# Tupla a lista
tupla = (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 lista
conjunto = {1, 2, 3}
lista = list(conjunto)
print(lista) # [1, 2, 3]
Casos de uso
# 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) # Madrid
latitud, longitud = ubicacion
print(f"Ubicación: {latitud}, {longitud}")
# SET: Etiquetas únicas
etiquetas = {"python", "programación", "python", "tutorial"}
print(f"Etiquetas: {etiquetas}") # Duplicados eliminados
# DICCIONARIO: Información de usuario
usuario = {
"id": 123,
"nombre": "Ana",
"email": "ana@example.com"
}
print(f"Usuario: {usuario['nombre']}")
Rendimiento
import sys
# Comparar tamaño en memoria
lista = [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

🐝