Queues

First in, first out — a kiosk line with collections.deque.

A queue is first-in, first-out (FIFO). A kiosk line: the person who arrived first is served first. collections.deque pops from the left in constant time.

Goal

Serve a kiosk queue and print the service order.

A line of names

from collections import deque

line = deque(["Ada", "Bena", "Caleb"])
served = []
while line:
    person = line.popleft()
    served.append(person)
    print("serve", person, "waiting", list(line))
print("order", served)

Do not pop(0) on a list

from collections import deque

n = 5
slow = list(range(n))
steps_list = 0
while slow:
    slow.pop(0)
    steps_list += 1

fast = deque(range(n))
steps_deq = 0
while fast:
    fast.popleft()
    steps_deq += 1

print("served", n, "list pops", steps_list, "deque pops", steps_deq)

Both serve n people. A list pop(0) shifts every remaining item (about work as n grows). deque.popleft() does not.

Arrive while serving

from collections import deque

line = deque(["Ada"])
line.append("Bena")
print("serve", line.popleft())
line.append("Caleb")
print("waiting", list(line))
Pitfall

list.pop() without an index pops the end — that is a stack. For a queue, popleft on a deque.