Portada: IIC1103 UC, listas de listas en la I2

·

·

IIC1103 UC en la I2: las listas de listas deciden la nota

Pasaste la I1 escribiendo if, while y funciones cortas. Llega la segunda interrogación y aparece un enunciado con un tablero de 8×8, una lista de alumnos con sus notas o un texto que hay que limpiar letra por letra. Lo que cambia no es la dificultad de Python: es que ahora tienes que imaginar estructuras, no solo instrucciones. Esta guía es para quien sintió que la I1 “se entendía” pero que con las listas se le empezó a desordenar la cabeza.

Una advertencia antes de partir: si ya programabas en el colegio y manejas listas anidadas sin pensarlo, gran parte de esto te va a parecer obvio. Salta directo a la tabla de errores y usa el resto como repaso. Si en cambio la I1 te costó, lee en orden.

Lo que dice el programa y por qué la I2 es la bisagra

El programa oficial de IIC1103 en el Catálogo UC (consultado el 28 de septiembre de 2026) ordena los contenidos así: algoritmos, Python, variables y expresiones, control de flujo, funciones, strings, listas, archivos, programación orientada a objetos, ordenación y búsqueda, y recursión. Once unidades. Las cinco primeras son las que normalmente cubre la I1; lo que viene después ya no se sostiene si no tienes firme lo anterior.

Ese mismo programa (versión publicada en 2019) reparte la nota en pruebas 30%, examen 30%, tareas 30% y participación 10%. La ponderación exacta y el temario de cada interrogación los define tu sección en su programa del semestre, así que revísalo; pero la lógica no cambia: strings y listas son el puente hacia las tareas grandes y el examen. Si ese puente queda débil, las unidades de clases, ordenación y recursión se construyen encima de arena.

Por eso nuestra tesis es simple: para la I2 no necesitas memorizar más métodos, necesitas un modelo mental correcto de qué es una lista. Con eso resuelto, el 80% de los errores desaparece.

Una lista guarda referencias, no copias

Este es el punto donde más gente pierde puntos sin darse cuenta. Mira este código:

tablero = [[0] * 3] * 3
tablero[0][0] = 5
print(tablero)
# [[5, 0, 0], [5, 0, 0], [5, 0, 0]]

Querías cambiar una sola casilla y cambiaron tres. La razón: [[0] * 3] * 3 no crea tres filas distintas, crea una lista con tres referencias a la misma fila. La propia sección de preguntas frecuentes de programación de la documentación de Python lo explica con este mismo ejemplo y propone crear cada fila por separado:

tablero = []
for i in range(3):
    tablero.append([0] * 3)

La misma idea explica otro clásico: b = a no copia la lista, le pone otro nombre. Si después haces b.append(7), a también tiene el 7. Para copiar una lista simple usa a[:] o list(a); para una lista de listas, tienes que copiar cada fila.

Un truco que sirve en la prueba escrita: cuando dudes, dibuja cajas y flechas. Cada variable es una etiqueta con una flecha hacia un objeto. Si dos flechas llegan a la misma caja, cualquier cambio a la caja se ve desde ambas. Parece infantil, pero es exactamente lo que hace el intérprete.

Recorrer una matriz sin perderte en los índices

La mayoría de los ejercicios de listas de listas se reducen a tres patrones. Si los reconoces al leer el enunciado, ya tienes medio problema resuelto.

Patrón 1: recorrer todo

for i in range(len(m)):
    for j in range(len(m[i])):
        # m[i][j] es la casilla de la fila i, columna j

Fíjate en len(m[i]) y no len(m) en el ciclo interno. En una matriz cuadrada da lo mismo, pero si el enunciado dice “una lista de cursos, cada uno con una cantidad distinta de alumnos”, las filas tienen largos distintos y el atajo se cae.

Patrón 2: recorrer por columna

Aquí se invierte el orden de los ciclos: el externo recorre columnas y el interno filas. Es el patrón de “calcula el promedio de cada evaluación” cuando cada fila es un alumno. Escríbelo en papel al menos tres veces antes de la prueba: es el que más se equivoca bajo presión.

Patrón 3: mirar vecinos

Tableros, mapas, buscaminas. Para revisar las casillas alrededor de (i, j) tienes que proteger los bordes: 0 <= i + di < filas y 0 <= j + dj < columnas. Olvidar esa condición produce el famoso IndexError o, peor, un índice negativo que Python acepta en silencio y que lee la última fila.

Strings: se parecen a una lista, pero no se dejan modificar

Un string se recorre igual que una lista (for letra in texto, texto[i], texto[2:5]), y eso engaña. La diferencia clave es que es inmutable: texto[0] = "H" lanza un error. Todo lo que “modifica” un string en realidad crea uno nuevo.

Consecuencias prácticas para la I2:

  • texto.upper() no cambia texto; devuelve otro string. Si no lo guardas (texto = texto.upper()), el cambio se pierde. Es uno de los errores que más aparece en las correcciones de prueba escrita.
  • Para construir un resultado letra por letra, parte con resultado = "" y ve sumando. O arma una lista de caracteres y al final usa "".join(lista).
  • split() es tu mejor amigo cuando el enunciado entrega datos en una línea, como "Pérez;6.1;5.4;4.8". linea.split(";") te devuelve una lista de strings: acuérdate de convertir las notas con float() antes de promediar.

Esa última combinación (string que se parte en lista, lista que se convierte en números) es justamente el puente hacia la unidad de archivos, donde cada línea del archivo es un string que tienes que desarmar.

Cinco errores que se repiten y cómo detectarlos a mano

Esta tabla reúne los errores clásicos de listas y strings en un primer ramo de programación. Úsala como checklist: antes de entregar, pasa tu código por cada fila.

Síntoma Causa probable Cómo lo detectas en papel
Cambias una casilla y cambian varias Filas creadas con [[0]*n]*m o b = a Dibuja cajas y flechas; si dos flechas llegan a la misma caja, ahí está
IndexError: list index out of range Ciclo hasta len(m) cuando debía ser len(m[i]), o vecino fuera del borde Haz el ruteo con una matriz de 2×3: los errores de dimensión saltan de inmediato
El string “no cambia” Método llamado sin guardar el resultado Busca cada .upper(), .replace() o .strip() y verifica que tenga un = a la izquierda
El promedio da error o un resultado raro Sumar strings que vienen de split() sin convertir Revisa el tipo de cada variable en tu ruteo: ¿es "5.4" o 5.4?
Se saltan elementos al borrar Modificar la lista mientras la recorres con for Construye una lista nueva con los que se quedan, en vez de borrar de la original

Fíjate que en ninguna fila la solución es “saber más Python”. Todas se resuelven con ruteo: seguir el programa línea por línea con valores concretos, anotando cómo cambia cada variable. Si en la I1 no practicaste ruteo, este es el momento de empezar.

Un plan de diez días y a quién no le sirve

Si la I2 de tu sección está a unas dos semanas, este reparto funciona bien para quien tiene otras cuatro o cinco pruebas en paralelo:

  1. Días 1 y 2: strings. Métodos básicos, recorrido, split y join. Resuelve ejercicios cortos a mano, sin computador.
  2. Días 3 y 4: listas simples. append, recorrido con índice y sin índice, copiar versus referenciar. Haz el experimento de b = a en el computador para verlo con tus propios ojos.
  3. Días 5 a 7: listas de listas. Los tres patrones de arriba, un ejercicio de cada uno por día. Alterna: uno en papel, otro en computador.
  4. Días 8 y 9: pruebas anteriores con tiempo real. Sin mirar soluciones hasta terminar.
  5. Día 10: solo la tabla de errores y repaso de lo que fallaste. Nada nuevo.

¿A quién no le sirve este plan? A quien llega con la I1 muy baja y todavía se enreda con while o con funciones que devuelven valores. En ese caso, gastar los primeros días en listas es construir sobre un piso que no aguanta. Primero revisa nuestra guía de la I1 de IIC1103 y, si quieres saber cuánto necesitas sacarte para salvar el ramo, haz primero la aritmética de la nota necesaria. Tampoco le sirve a quien ya programa con soltura: para ti, lo que rinde es resolver pruebas anteriores con reloj desde el día 1.

Lo que sí aplica a todos: la I2 de IIC1103 rara vez castiga por no conocer un método raro. Castiga por no entender qué está guardado en cada variable. Si llegas a la prueba sabiendo dibujar tus listas, vas a leer los enunciados de otra manera.

Si quieres practicar con ejercicios guiados y resueltos paso a paso, revisa los cursos de preparación de Aromperla. Y para ver el resto de las guías de ramos de ingeniería y otras carreras, pasa por nuestra página de la Universidad Católica.

¿Quieres romperla en la UC?

Mira todos los cursos de preparación para tu universidad.

Ver cursos de la UC →