Aprende Python · lección gratuita

Lección 30 · Algoritmos clásicos

Resumen

Un algoritmo es una secuencia de pasos para resolver un problema. Muchas tareas habituales sobre listas (encontrar el máximo, contar, sumar, buscar) siguen patrones que se repiten una y otra vez. Aprender estos patrones clásicos te da la base para resolver casi cualquier problema combinando bucles, listas y condicionales.

Conceptos

La idea central de casi todos estos algoritmos es la misma: declaras una variable de control antes del bucle (el máximo provisional, el contador en 0, la suma en 0) y la vas actualizando mientras recorres la lista. Al terminar el bucle, esa variable contiene la respuesta. A este patrón se le llama "acumulador".

Para el máximo, una técnica robusta es asumir que el primer elemento es el mayor y luego comparar con el resto. Si encuentras algo más grande, lo reemplazas. El mismo razonamiento (invertido) sirve para el mínimo.

numeros = [4, 9, 2, 7, 1]

mayor = numeros[0]          # candidato inicial
for n in numeros:
    if n > mayor:
        mayor = n           # encontré algo más grande
print(mayor)                # 9

La búsqueda lineal es distinta: en lugar de recorrer todo, podemos devolver en cuanto encontramos el objetivo. Recorremos por índice con range(len(lista)) para poder informar la posición, y si terminamos sin éxito devolvemos -1.

Ejemplos

numeros = [4, 9, 2, 7, 1]

# 1) Contar cuántos son mayores que 3
contador = 0
for n in numeros:
    if n > 3:
        contador += 1
print(contador)             # 3  (el 4, el 9 y el 7)

# 2) Sumar y promediar
suma = 0
for n in numeros:
    suma += n
print(suma)                 # 23
print(suma / len(numeros))  # 4.6

# 3) Búsqueda lineal: ¿en qué posición está el 7?
posicion = -1
for i in range(len(numeros)):
    if numeros[i] == 7:
        posicion = i
print(posicion)             # 3

# 4) ¿Está ordenada de menor a mayor?
ordenada = True
for i in range(len(numeros) - 1):
    if numeros[i] > numeros[i + 1]:
        ordenada = False
print(ordenada)             # False
💡 Inicializa el acumulador con el valor neutro correcto. Para sumar empieza en 0, para contar en 0, y para el máximo/mínimo usa el primer elemento de la lista (no 0, porque la lista podría tener solo números negativos).

Cheatsheet

TareaPatrón
Máximom = lista[0] y if n > m: m = n
Mínimom = lista[0] y if n < m: m = n
Contar con condiciónc = 0 y if cond: c += 1
Sumars = 0 y s += n
Promedios / len(lista)
Búsqueda linealrecorrer con índice y devolver posición o -1
Invertirinv.insert(0, n) o lista[::-1]
¿Ordenada?comparar lista[i] > lista[i+1]

---

← Módulos y librería estándarTrabajar con datos: listas de diccionarios →

Ver todas las lecciones de Aprende Python →