Listas y tuplas
Domina las secuencias ordenadas de Python, listas mutables y tuplas inmutables.
- Crear y acceder a listas y tuplas
- Usar métodos de lista: append, extend, pop, sort, reverse
- Comprender la inmutabilidad de las tuplas y cuándo usarlas
- Desempaquetar secuencias con asignación y *rest
La secuencia ordenada y editable
Una lista es una secuencia que puedes hacer crecer, encoger y reordenar. El acceso obedece a todo lo que te enseñó el corte:
fruits = ["apple", "banana", "cherry"]
print(fruits[0]) # apple
print(fruits[-1]) # cherry
print(fruits[0:2]) # ['apple', 'banana']Indexar desde , índices negativos contando hacia atrás, rebanadas tomando ventanas, las mismas tres habilidades, ahora apuntadas a una colección de objetos cualesquiera. Donde una cadena estaba congelada, la lista es arcilla.
El arsenal de la lista
Los métodos son un taller de ediciones:
nums = [3, 1, 4, 1, 5]
nums.append(9) # [3, 1, 4, 1, 5, 9]
nums.insert(0, 0) # [0, 3, 1, 4, 1, 5, 9]
nums.extend([2, 6]) # [0, 3, 1, 4, 1, 5, 9, 2, 6]
nums.pop() # quita 9 y lo devuelve
nums.remove(1) # quita el primer 1
nums.sort() # ordena en su sitio
nums.reverse() # invierte en su sitio
len(nums) # longitud actualappend añade un ítem al final; extend vierte una secuencia entera; insert desliza uno en una posición elegida. pop retira del final (o de un índice dado) y te entrega el valor retirado; remove borra el primer ítem coincidente. La lista es el primo mutable de caballos de trabajo como la expansión decimal de , una cuerda creciente de valores que sigues editando.
Listas de listas: tablas y matrices
Los elementos de una lista pueden ser a su vez listas, lo que convierte una secuencia plana en una tabla, una matriz es una lista de filas, y cada fila es una lista de números:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
print(matrix[1][2]) # 6 — fila 1, columna 2
print(matrix[1]) # [4, 5, 6]matrix[1] elige la segunda fila; añadir [2] baja a esa fila y elige su tercer elemento. Dos índices direccionan una celda exactamente como el subíndice nombra una entrada de una matriz en papel. El mismo truco construye retículas, tableros de juego y filas de hojas de cálculo.
Mutación vs. lista nueva: una bifurcación que muerde
Aquí hay un desajuste que magulla a los principiantes. Algunos métodos mutan la lista y devuelven None; otros devuelven una lista nueva y dejan la original intacta. La voz de un método no te dice cuál es:
nums = [3, 1, 2]
result = nums.sort() # ¡result es None! nums ahora es [1, 2, 3]
result = sorted(nums) # result es [1, 2, 3], nums sin cambiosnums.sort() reordena en su sitio y no devuelve nada, el valor de tu expresión es None. sorted(nums) calcula una lista nueva y ordenada y deja nums intacta. El nombre es la señal: verbos como sort y reverse tocan el objeto; sorted y list.copy() producen una copia para un nuevo dueño.
Tuplas: la secuencia congelada
Una tupla es una secuencia ordenada, inmutable, una lista que perdió sus herramientas de edición:
point = (3, 4)
print(point[0]) # 3
# point[0] = 5 # TypeError!La inmutabilidad no es una desventaja; es una promesa. El punto es un único objeto matemático que no debe cambiar bajo tus pies. Coordenadas, colores RGB, filas de base de datos, datos que son fijos por definición pertenecen a las tuplas, donde la reasignación accidental se vuelve una excepción en lugar de una corrupción silenciosa.
Desempaquetado: una línea, muchos nombres
Una secuencia puede plegarse en varias variables en una sola asignación. Python incluso recoge el sobrante con un nombre estrellado:
x, y = (3, 4) # x=3, y=4
a, b, *rest = [1, 2, 3, 4, 5] # a=1, b=2, rest=[3, 4, 5]
first, *_, last = (1, 2, 3, 4) # first=1, last=4*rest traga todo lo que hay entre las ranuras nombradas; *_ es el mismo gesto luciendo el nombre convencional de “descarta esto”. Es la versión de lista de evaluar una función en un punto, entradas y salidas se alinean por posición.
Un ejemplo resuelto: la libreta de notas
Observa el arsenal trabajando en una tarea real, las notas de un examen del grupo:
scores = []
scores.append(8)
scores.append(6)
scores.extend([9, 7, 10])
total = sum(scores) # sum() suma cada elemento
best = max(scores) # max() halla el mayor
count = len(scores) # len() los cuenta
average = total / count
print(average) # 8.0
print(best) # 10Recoge con append/extend y luego lee con sum, max y len. Fíjate en la división: total / count es la media aritmética, el mismo que conoces de las matemáticas, ahora en una línea de código. Una lista es un lugar para acumular datos, y el bucle entre hacerla crecer y leerla es el patrón que repite todo programa real.
Errores comunes
sort()devuelveNone. Si quieres una lista nueva, deja quesorted()cargue con el valor.- Confusión con la copia superficial.
a = bhace dos nombres para una lista;a = b.copy()oa = list(b)construyen una lista aparte. - Mezclar tipos.
[1, "two", 3.0]es legal pero dificulta comparaciones y razonamientos; mantén las colecciones honestas sobre sus contenidos. appendvsextend.nums.append([1, 2])anida una lista como un solo elemento;nums.extend([1, 2])vierte sus ítems como elementos separados.removeborra solo la primera coincidencia.[1, 2, 1].remove(1)deja[2, 1]; eliminar cada copia requiere un bucle (lección para más adelante).
🧩 Desafíos
🧩 Desafío, piensa primero, luego revela
Elimina los duplicados conservando el orden: [1, 3, 2, 3, 1, 4, 2] → [1, 3, 2, 4].
💡 Respuesta: list(dict.fromkeys(nums)), un dict mantiene el orden de inserción (desde 3.7+), y las claves duplicadas colapsan a su primera posición.
🧩 Desafío, piensa primero, luego revela
Intercambia dos variables sin variable temporal, usando desempaquetado de tuplas.
💡 Respuesta: a, b = b, a, el lado derecho se evalúa como tupla primero, así que el canje es simultáneo, no secuencial.
🤔 Preguntas socráticas
- ¿Cuándo recurres a una tupla en vez de a una lista, y qué te compra la inmutabilidad?
- ¿Por qué
sort()muta dondesorted()devuelve algo nuevo, y cuándo prefieres cada uno? - ¿Cómo recoge
*restel sobrante? ¿Puede*_hacer de descarte nombrado?
✅ Comprobación rápida
1. ¿Qué imprime a = [1, 2]; b = a; b.append(3); print(a)?
2. ¿Cuál es correcta? a, b, c = [1, 2]