¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Pilas y colas

Después de esta lección: Puedo usar una pila y una cola para guardar datos en el orden que necesito.

Lección de 45 min2 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Deshacer y la fila de la caja

Una pila y una cola son dos formas de guardar datos que se sacan en un orden fijo. La pila hace funcionar el botón de deshacer, y la cola el orden de una impresora compartida.

Si sabes cuál de las dos necesitas, tu programa se vuelve más simple.

Al final de esta lección

Nota

Puedo usar una pila y una cola para guardar datos en el orden que necesito.

Palabras clave

PalabraQué significaEjemplo
Pilauna lista donde sale primero lo último que entró
Colauna lista donde sale primero lo primero que entró
Apilarmeter un elemento en la parte de arriba de la pilaappend
Desapilarsacar el elemento de arriba de la pilapop
LIFOel último en entrar es el primero en salir
FIFOel primero en entrar es el primero en salir

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una pila saca primero lo último que entró

Imagina una pila de platos. Dejas un plato encima y, cuando quieres uno, coges el de arriba.

Eso es una pila: LIFO, "last in, first out". En el navegador, el botón de atrás va sacando las páginas desde la última que visitaste.

Una pila con una lista de Python

Código: python
plates = []
plates.append("A")
plates.append("B")
plates.append("C")
print(plates.pop())
print(plates.pop())
print(plates)

Saca el último día de una pila

Comando
docker exec jupyter python3 -c "import csv; h=[int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; s = h[:5]; print(s.pop(), s)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué sacó la pila

El Run copia los cinco primeros alquileres y llama a pop. Imprime 204 [137, 212, 173, 327].

Salió el 204, el último de los cinco. Es el que estaba arriba. Los demás siguen en su sitio.

Una cola saca primero lo primero que entró

Una cola es como la fila de la caja de una tienda. Quien llegó antes, se va antes.

Eso es FIFO, "first in, first out". Una impresora compartida usa una cola: imprime los trabajos en el orden en que llegaron.

Una cola con deque

Código: python
from collections import deque

line = deque()
line.append("Ana")
line.append("Hugo")
line.append("Lucía")
print(line.popleft())
print(list(line))

Saca el primer día de una cola

Comando
docker exec jupyter python3 -c "import csv; h=[int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; from collections import deque; q = deque(h[:5]); print(q.popleft(), list(q))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué sacó la cola

El Run imprime 137 [212, 173, 327, 204]. Sale el 137, el primero de los cinco, y los demás avanzan un puesto.

Con la pila salió el último. Con la cola sale el primero. Es la única diferencia, y cambia todo.

Un error frecuente

Advertencia

Mucha gente cree que pop() saca el primer elemento. Saca el último. Para sacar el primero de una cola, usa popleft() de deque. Con una lista larga, pop(0) funciona, pero obliga a mover todos los demás elementos.

Una pila comprueba los paréntesis

Un programa tiene paréntesis, corchetes y llaves que se abren y se cierran. Un cierre debe cerrar el último que se abrió.

Eso es justo una pila. Al ver un símbolo que abre, lo apilas. Al ver uno que cierra, miras la cima: si encaja, la sacas. Si no encaja, hay un error.

Ejemplo resuelto: la pila con ([)]

CarácterQué hacesPila después
(Abre: apilas(
[Abre: apilas( [
)Cierra, pero arriba hay [ : no encajaError en el índice 2

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un comprobador de paréntesis

Código: python
def is_balanced(text):
    stack = []
    pairs = {")": "(", "]": "[", "}": "{"}
    for char in text:
        if char in "([{":
            stack.append(char)
        elif char in ")]}":
            if len(stack) == 0 or stack[len(stack) - 1] != pairs[char]:
                return False
            stack.pop()
    return len(stack) == 0

print(is_balanced("{[()]}"))
print(is_balanced("([)]"))

Para ir más lejos: una cola de pedidos

En el cuaderno, crea una deque con los alquileres de los diez primeros días. Saca el primero, y después saca el último con pop().

¿Una deque es pila o cola? Las dos cosas a la vez: puedes sacar por los dos extremos.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.