Python基礎として、「キュー」や「スタック」というものがあります。
Pythonを使用する上で理解するべき、最も基本的なデータ構造です。
本記事では、そんなPython基礎となるキューとスタックについて、詳しくご説明します。
キューとスタック
キューとスタックは、いずれも一列に並んだデータ構造です。
両者の違いは、データの取り出し方にあります。
キュー(queue)の構造は、下図左側で表される通り、新しいデータを入れる場合、最も古いデータを取り出します。
この構造は、FIFO(First-In, First-Out)と呼ばれています。
対して、スタック(stack)の構造は、下図右側で表される通り、新しいデータを入れる場合、入れる前の最も新しいデータを取り出します。
この構造は、LIFO(Last-In, First-Out)と呼ばれています。
キュー
Pythonには標準として、queueモジュールが用意されています。
FIFOキューのコンストラクタとしては、queue.Queue()があります。
キューの作成例を以下にご紹介します。
#input
import queue
q = queue.Queue()
data = ["apple","orange","banana"]
for i in data:
q.put(i)
print(q.get())
#output
apple
インポートしたqueueモジュールに、”apple”,”orange”,”banana”のデータを格納し、データを1つを取り出すプログラムです。
最初に格納した”apple”が取り出されています。
次に、while not文を使用し、データをすべて取り出してみます。
#input
while not q.empty():
print(q.get())
#output
apple
orange
banana
格納した順番で、古いものから取り出されていることが分かります。
次に、データ格納上限数を3に指定し、4つのデータを格納してみます。
#input
import queue
q = queue.Queue(3)
data = ["apple","orange","banana","peach"]
for i in data:
q.put(i,block=False)
#output
queue.Full
キューが格納上限であることを表すエラーが出力されました。
スタック
FIFOキューのコンストラクタとしては、queue.LifoQueue()があります。
スタックの作成例を以下にご紹介します。
#input
import queue
s = queue.LifoQueue()
data = ["apple","orange","banana"]
for i in data:
s.put(i)
while not s.empty():
print(s.get())
#output
banana
orange
apple
格納したデータをすべて取り出してみましたが、キューとは逆の順番で取り出されたことが分かるかと思います。
優先順位付きキュー
その他のqueueモジュールとして、優先順位付きキューqueue.PriorityQueue()があります。
データ格納の際に、格納したデータが昇順ソートされるものです。
以下に例をご紹介します。
#input
import queue
p = queue.PriorityQueue()
data = [7,5,6,1,3,2]
for i in data:
p.put(i)
while not p.empty():
print(p.get())
#output
1
2
3
5
6
7
まとめ
この記事では、Python基礎となるキューとスタックについて、ご説明しました。
本記事を参考に、ぜひデータ構造を作成してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!