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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Pila | una lista donde sale primero lo último que entró | |
| Cola | una lista donde sale primero lo primero que entró | |
| Apilar | meter un elemento en la parte de arriba de la pila | append |
| Desapilar | sacar el elemento de arriba de la pila | pop |
| LIFO | el último en entrar es el primero en salir | |
| FIFO | el 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
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
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
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
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ácter | Qué haces | Pila después |
|---|---|---|
| ( | Abre: apilas | ( |
| [ | Abre: apilas | ( [ |
| ) | Cierra, pero arriba hay [ : no encaja | Error en el índice 2 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un comprobador de paréntesis
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.