工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Pythonキュー:FIFOとLIFOを実例で理解

Pythonキュー:FIFOとLIFOを実例で理解

キューはアイテムを線形順序で格納するデータ構造です。アイテムは後端(リア)に追加され、前端(フロント)から取り出され、**先入れ先出し(FIFO)**の原則に従います。キューには論理的な2つの端、**フロント**と**リア**があり、リアで*エンキュー*、フロントで*デキュー*を行います。

このチュートリアルで学べること:

キュー モジュールの仕組み

振る舞いは物理的な行列と類似:最初に並んだ人が最初にサービスを受けます。キュー データ構造では、最初にエンキューされた要素が最初にデキューされます。

Pythonキュー:FIFOとLIFOを実例で理解

リアは新しいアイテムの挿入ポイント(例: 値7)。フロントはアイテムがキューを離れるポイント;最初のアイテムを削除すると値1が得られます。

キューは線形なので、中央の任意の要素を直接削除できません;先にあるすべての要素をデキューする必要があります。

Pythonキュー:FIFOとLIFOを実例で理解

Pythonのキューの種類

Pythonのqueueモジュールには2つの主要なキュー クラスがあります:

始め方: モジュールのインポート

Pythonにはqueueモジュールが標準搭載;外部インストール不要。

import queue

FIFOキューのインスタンス化:

q1 = queue.Queue()

LIFOキューのインスタンス化:

q1 = queue.LifoQueue()

主要メソッド

QueueとLifoQueueは同じコア APIを公開:

FIFOキューの例

単一アイテムのエンキュー

import queue
q1 = queue.Queue()
q1.put(10)  # 10をキューに追加

サイズ制限付き複数アイテムのエンキュー

q1 = queue.Queue(maxsize=5)  # 最大5アイテム
for i in range(1, 6):
    q1.put(i)
print(q1.full())  # → True

出力:

True

アイテムのデキュー

item = q1.get()
print('デキューされたアイテム:', item)

出力:

デキューされたアイテム: 10

LIFOキューの例

単一アイテムのエンキュー

q1 = queue.LifoQueue()
q1.put(10)

アイテムのデキュー

item = q1.get()
print('LIFOからデキュー:', item)

出力:

LIFOからデキュー: 10

バッチ操作

FIFO – 20個の数値をエンキュー

q1 = queue.Queue()
for i in range(20):
    q1.put(i)

FIFO – 全デキュー

while not q1.empty():
    print('値:', q1.get())

出力:

値: 0
値: 1
...
値: 19

LIFO – 20個の数値をエンキュー

q1 = queue.LifoQueue()
for i in range(20):
    q1.put(i)

LIFO – 全デキュー

while not q1.empty():
    print('値:', q1.get())

出力:

値: 19
値: 18
...
値: 0

キューのソート(バブルソート)

q1 = queue.Queue()
for item in [11, 5, 4, 21, 3, 10]:
    q1.put(item)

n = q1.qsize()
for i in range(n):
    x = q1.get()
    for j in range(n-1):
        y = q1.get()
        if x > y:
            q1.put(y)
        else:
            q1.put(x)
        x = y
    q1.put(x)

while not q1.empty():
    print(q1.queue[0], end=' ')
    q1.get()

出力:

3 4 5 10 11 21

再帰を使ったキューの反転

def reverse_queue(src, dest):
    item = src.get()
    if not src.empty():
        reverse_queue(src, dest)
    dest.put(item)
    return dest

q1 = queue.Queue()
for item in [11, 5, 4, 21, 3, 10]:
    q1.put(item)

q2 = queue.Queue()
reverse_queue(q1, q2)

while not q2.empty():
    print(q2.queue[0], end=' ')
    q2.get()

出力:

10 3 21 4 5 11

クイックサマリー

Python

  1. FIFOとLIFO:主な違い、メリット・デメリット、実践的応用
  2. Python 演算子完全マスター: 包括的ガイド
  3. Pythonリスト操作:作成、アクセス、変更、高度なテクニック
  4. Python辞書完全ガイド:作成、操作、高度なテクニック
  5. Python strip()メソッド完全ガイド:実践例付き
  6. Python len()関数:オブジェクトの長さを測る実践ガイド
  7. Python yieldをマスター:ジェネレータvs return – 実践ガイド
  8. Python collections.Counter:効率的なカウント、更新、演算操作
  9. Python enumerate()をマスター:リスト、タプル、文字列、辞書でインデックス付きループ
  10. Python time.sleep():コードに遅延を追加する方法(例付き)
  11. Python list.index():要素の位置を検索する実践ガイド