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 n² 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.