Pensamiento Computacional (090) · Unidad 4 — Estructuras de datos
Listas
Una lista guarda varios valores en orden, bajo un solo nombre. A diferencia de un string, se puede modificar.
La explicación
Varios valores, un nombre
notas[0] → 7 notas[-1] → 6
len(notas) → 4 notas[1:3] → [4, 9]
Se indexa igual que un string: desde 0, con negativos desde el final, y con rebanadas que no incluyen el límite derecho. Todo lo que aprendiste de strings sirve acá.
Una lista puede mezclar tipos — [1, "hola", True] es válida — aunque en la práctica
casi siempre guardan cosas del mismo tipo.
La diferencia con un string: se puede modificar
"hola"[0] = "H" # esto da error
Las listas son mutables. Eso abre posibilidades y también trae el problema del tema 4.2.
Agregar y sacar
notas.insert(0, 5) inserta en una posición
notas.remove(4) saca la primera aparición del valor 4
notas.pop() saca el último y lo devuelve
notas.pop(0) saca el de la posición 0
remove borra por valor, pop por posición. Con
[10, 20, 30], remove(0) tira error porque no hay ningún 0 en la lista,
mientras que pop(0) saca el 10. Confundirlos es muy común.
Preguntar y contar
sum([1, 2, 3]) → 6
max([4, 9, 2]) → 9
min([4, 9, 2]) → 2
len([4, 9, 2]) → 3
Con sum y len el promedio sale en una línea:
sum(notas) / len(notas).
Armar una lista desde cero
El patrón más usado: empezar vacía y llenarla en un ciclo.
for n in range(1, 5):
cuadrados.append(n * n)
print(cuadrados) # [1, 4, 9, 16]
Es el mismo esquema del acumulador, pero juntando valores en vez de sumarlos. Y con la misma trampa: la lista vacía va afuera del ciclo.
Escribir una función que reciba una lista de notas y devuelva cuántas están aprobadas (7 o más).
El patrón es contar: un contador afuera, y adentro del ciclo se suma 1 cuando se cumple la condición.
cuenta = 0
for n in notas:
if n >= 7:
cuenta = cuenta + 1
return cuenta
Con [7, 4, 9, 6]: el 7 cuenta, el 4 no, el 9 sí, el 6 no. Devuelve 2.
for n in notas y no for i in range(len(notas)).
Como sólo necesitamos los valores y no las posiciones, la primera forma es más corta y
más clara. Reservá la del range para cuando de verdad necesites el índice.
Control: probá con la lista vacía []. Tiene que devolver 0, no tirar error.
El ciclo simplemente no da ninguna vuelta y devuelve el contador como estaba. Las funciones que
reciben listas siempre hay que probarlas con la lista vacía.
Dónde se cae la mayoría
- Confundir remove (por valor) con pop (por posición).
- Crear la lista vacía adentro del ciclo: se reinicia en cada vuelta.
- Olvidar que las rebanadas no incluyen el límite derecho, igual que en strings.
Hasta acá la explicación. La práctica es la otra mitad: 7 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Además trae una animación que muestra la idea en movimiento.
Practicar Listas →