Una lista es una colección ordenada y mutable: puedes agregar, quitar y cambiar sus elementos. Es la estructura de datos más usada de Python.
Crear y acceder
frutas = ["manzana", "pera", "uva"]
mixto = [42, "texto", True, 3.14] # admite tipos mezclados
vacia = []
print(frutas[0]) # manzana → índice desde 0
print(frutas[-1]) # uva → negativo: desde el final
print(len(frutas)) # 3
Mutar: agregar, quitar, cambiar
Las listas cuentan con un repertorio completo de métodos para alterar su contenido:
numeros = [3, 1, 2]
# Agregar elementos
numeros.append(4) # [3, 1, 2, 4] → agrega un único elemento al final
numeros.insert(0, 0) # [0, 3, 1, 2, 4] → inserta en una posición (índice, valor)
numeros.extend([5, 6]) # [0, 3, 1, 2, 4, 5, 6] → añade todos los elementos de un iterable
# Eliminar elementos
numeros.remove(1) # elimina la PRIMERA aparición del valor (lanza ValueError si no existe)
ultimo = numeros.pop() # quita y devuelve el último elemento (o numeros.pop(i) en el índice i)
del numeros[0] # instrucción 'del' para borrar por índice o rebanada
numeros[0] = 99 # reasignación por índice
numeros.clear() # vacía la lista por completo dejándola en []
# Búsqueda, conteo y ordenamiento
letras = ["b", "a", "c", "a", "d"]
print(letras.index("c")) # 2 → índice de la primera aparición
print(letras.count("a")) # 2 → cuántas veces se repite el valor
letras.reverse() # invierte la lista en sitio (in-place)
letras.sort() # ordena la lista en sitio (in-place)
letras.sort(reverse=True)# ordena de forma descendente
# Copia superficial
copia = letras.copy() # crea una lista nueva independiente
Cuidado: append() agrega un elemento. Para unir listas usa extend() o +:
a = [1, 2]
a.append([3, 4]) # [1, 2, [3, 4]] ← ¡lista dentro de lista!
b = [1, 2]
b.extend([3, 4]) # [1, 2, 3, 4] ← elementos sueltos
Operaciones útiles
numeros = [4, 8, 1, 2]
print(max(numeros)) # 8
print(min(numeros)) # 1
print(sum(numeros)) # 15
print(sorted(numeros)) # [1, 2, 4, 8] → lista NUEVA ordenada
numeros.sort() # [1, 2, 4, 8] → ordena EN SITIO
print(8 in numeros) # True → pertenencia
Slicing en listas
Igual que en strings — [inicio:fin] sin incluir el fin:
letras = ["a", "b", "c", "d", "e"]
print(letras[1:4]) # ['b', 'c', 'd']
print(letras[:2]) # ['a', 'b']
print(letras[::-1]) # ['e', 'd', 'c', 'b', 'a'] → invertida
Tuplas: la prima inmutable
Una tupla se crea con paréntesis (o comas) y no puede modificarse después:
coordenada = (10.5, 20.3)
un_solo_elemento = (42,) # ¡OJO! La coma es obligatoria para tuplas de un elemento
coordenada[0] # 10.5 → sí se puede leer
coordenada[0] = 5 # TypeError: ¡no se puede asignar!
Métodos de las tuplas
Al ser inmutables, las tuplas son más ligeras y eficientes en memoria, y solo tienen dos métodos:
tupla.count(valor): Cuenta cuántas veces se repite un elemento ((1, 2, 2, 3).count(2)→2).tupla.index(valor): Devuelve el índice de la primera aparición (("a", "b", "c").index("b")→1).
¿Cuándo usar cada una?
- Lista: colección homogénea que va a cambiar (ítems de un carrito, resultados).
- Tupla: datos fijos que van juntos (coordenadas, RGB de un color, registros inmutables) y claves de diccionarios.
Desempaquetado
Python puede asignar elementos de una secuencia a varias variables de golpe:
x, y = (10, 20)
print(x, y) # 10 20
primero, *resto = [1, 2, 3, 4]
print(primero) # 1
print(resto) # [2, 3, 4]
Errores comunes
lista = [1, 2, 3]
lista[10] # IndexError: fuera de rango
resultado = lista.append(4)
print(resultado) # None → append MUTA la lista, no devuelve nada
lista = lista.append(4) # ERROR clásico: ahora lista es None
copias = lista # ¡esto NO copia! ambas nombres apuntan a la MISMA lista
copia_real = lista.copy() # así se copia de verdad
Resumen
- Las listas son mutables; las tuplas inmutables
append()agrega al final (muta, devuelveNone)max/min/sum/sorted/inson tus herramientas de análisis rápidas- El desempaquetado
a, b = tuplaasigna múltiples variables a la vez lista.copy()para copiar de verdad;=solo crea otro nombre