「元に戻す」と印刷の順番
見積書を作っていて、入力をまちがえました。「元に戻す」を押すと、直前の操作が消えます。
一方、事務所の複合機では、先に送った書類から印刷されます。
どちらも「順番に並べて、一つずつ出す」仕組みです。でも、出す順番が逆です。このちがいが、今日のテーマです。
このレッスンのゴール
メモ
仕事に合わせて、スタックかキューを選ぶことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| スタック | 最後に入れたものから出す並びです。 | |
| キュー | 最初に入れたものから出す並びです。 | |
| 後入れ先出し | スタックの出し方です。英語の略で LIFO と書きます。 | |
| 先入れ先出し | キューの出し方です。英語の略で FIFO と書きます。 | |
| deque | 両端から速く出し入れできる、Pythonの入れ物です。 | jobs.popleft() |
学生が入力するセルは、このプレビューでは空白です。
スタックは最後のものから出す
スタックは、皿を積み重ねるイメージです。新しい皿は上に置き、取るときも上から取ります。
Pythonでは、リストの append で積み、pop() で上から取り出します。
「元に戻す」機能や、ブラウザの「戻る」ボタンがスタックの例です。
やってみよう: 元に戻す
# 見積書の編集ソフトです。操作を一つずつ記録して、「元に戻す」に使います。
history = []
history.append("単価を1,200円に変更")
history.append("数量を30個に変更")
history.append("値引き5%を追加")
print("記録:", history)
# 元に戻す: いちばん新しい操作から取り消します。
undo = history.pop()
print("取り消した操作:", undo)
print("残りの記録:", history)
# もう一度 pop() して、次に取り消される操作を確かめましょう。
キューは最初のものから出す
キューは、窓口で番号札を取って待つ列と同じです。先に来た人から呼ばれます。
Pythonでは deque を使い、append で後ろに並べ、popleft() で先頭から出します。
印刷待ちや、問い合わせチケットの処理がキューの例です。
やってみよう: 印刷待ち
from collections import deque
# 市役所の事務所の複合機です。印刷は、届いた順に処理します。
jobs = deque()
jobs.append("住民票の写し")
jobs.append("会議資料")
jobs.append("請求書の控え")
print("待っている印刷:", list(jobs))
# いちばん先に届いたものから印刷します。
first = jobs.popleft()
print("印刷中:", first)
print("まだ待っている:", list(jobs))
# "広報誌の原稿" を append してから、もう一度実行しましょう。
例: 同じ三つを入れて出す
| 入れた順 | スタックから出る順 | キューから出る順 |
|---|---|---|
| 1. 住民票の写し | 1. 請求書の控え | 1. 住民票の写し |
| 2. 会議資料 | 2. 会議資料 | 2. 会議資料 |
| 3. 請求書の控え | 3. 住民票の写し | 3. 請求書の控え |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
「リストの pop() は先頭を取り出す」と思う人がいます。pop() は、最後の要素を取り出します。キューのように先頭から出したいときは、deque の popleft() を使います。