AI資格ドリル
資格を選ぶ↓

用語比較

listとcollections.dequeの違い|スタックとキューの使い分けをPython3エンジニア認定基礎試験で判断する

listは末尾への追加と末尾からの取り出しでスタックとして使えますが、先頭への挿入・取り出しはすべての要素をシフトする必要があるため低速です。キュー(先入れ先出し)を実装するなら、両端への追加と取り出しが高速なcollections.dequeを使うと公式チュートリアル5.1.2は述べています。

Python 3 エンジニア認定基礎試験では、stackにappend()してpop()した結果の順序と、dequeにappend()してpopleft()した結果の順序を取り違えさせる問題が想定されます。第5章「データ構造」のスタックとキューの論点で、取り出される要素が最後か最初かを読み違えると逆の答えを選んでしまいます。

このページは、listのpop()とdequeのpopleft()を「どちらも1つ取り出す操作」とだけ覚えている人を対象にしています。公式チュートリアルの2つの例を、取り出される順に並べて確認します。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

list(スタック)

append()で末尾に追加し、インデックス無しのpop()で末尾から取り出す。最後に追加した要素が最初に出る(last-in, first-out)。

collections.deque(キュー)

両端への追加と取り出しが高速。append()で追加し、popleft()で先頭から取り出す。最初に追加した要素が最初に出る(first-in, first-out)。

違いを表で確認

比較軸list(スタック)collections.deque(キュー)
取り出される要素pop()は最後に追加された要素popleft()は最初に追加された要素
公式チュートリアルの例stack = [3, 4, 5] にappend(6)・append(7)をして、pop()を3回呼ぶと7, 6, 5の順に返り、stackは[3, 4]になるqueue = deque(["Eric", "John", "Michael"]) にappend("Terry")・append("Graham")をして、popleft()を2回呼ぶと'Eric'、'John'の順に返る
操作の名前スタックでは、追加がappend()、取り出しがインデックスを指定しないpop()キューでは、追加がappend()、先頭からの取り出しがpopleft()
先頭側の操作先頭への挿入・取り出しは、すべての要素をシフトする必要があるため低速両端に対して高速な追加と取り出しを実現している
取り出し後に残る要素スタックの例では[3, 4]キューの例では到着順に deque(['Michael', 'Terry', 'Graham'])

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

pop()がいつも先頭を取り出すと思っている人

インデックスを指定しないpop()は、公式チュートリアルの例で最後の要素から7, 6, 5の順に返ります。先頭から取り出すのはdequeのpopleft()です。

02

listでキューを作ればよいと考える人

listもキューとして使えますが、先頭の挿入・取り出しはすべての要素をシフトするため低速です。公式チュートリアルは、キューの実装にはcollections.dequeを使うよう案内しています。

03

dequeの残りの中身を、取り出した順に並べてしまう人

例ではEricとJohnをpopleft()した後、キューに残るのは到着順の deque(['Michael', 'Terry', 'Graham']) です。取り出した要素の順ではなく、残った要素の追加順で並びます。

問題文から答えを選ぶ手順

  1. 1

    取り出すのが最後か最初かを確認する

    最後に追加した要素を取り出すならスタック、最初に追加した要素を取り出すならキューです。

  2. 2

    スタックなら、append()とpop()の組み合わせを確認する

    append()で末尾に追加し、インデックス無しのpop()で末尾から取り出します。

  3. 3

    キューなら、dequeのpopleft()を確認する

    append()で末尾に追加し、popleft()で先頭から取り出すと、追加した順に取り出されます。

  4. 4

    取り出した後に残る要素を確認する

    取り出された分を除いた要素が、追加された順に残ります。

試験での見分け方

  • 1スタックは最後に追加した要素が最初に出る(last-in, first-out)。
  • 2listのpop()をインデックス無しで使うと、末尾の要素を取り出す。
  • 3キューは最初に追加した要素が最初に出る(first-in, first-out)。
  • 4キューの実装には、先頭の操作が低速なlistでなくcollections.dequeを使う。
  • 5dequeの先頭からの取り出しにはpopleft()を使う。

誤答しやすい選択肢

pop()とpopleft()の取り出し位置を取り違える

修正: pop()は末尾、popleft()は先頭から取り出します。公式チュートリアルの例では、stackのpop()が7, 6, 5、queueのpopleft()が'Eric'、'John'の順です。

dequeのpopleft()をlistにも使えると考える

修正: popleft()はdequeのメソッドです。公式チュートリアルは、listの先頭の操作は低速なので、キューにはcollections.dequeを使うと案内しています。

キューに残る要素を逆順で答える

修正: 例では、2回popleft()した後に残るのは deque(['Michael', 'Terry', 'Graham']) で、追加された順です。

dequeの利点を「すべての操作が速い」と覚える

修正: 公式チュートリアルが述べるのは、両端に対して高速な追加と取り出しを実現していることです。

確認問題

Q1stack = [3, 4, 5] に append(6)・append(7) をしてから pop() を3回呼ぶと、返る順は?

答え: 7, 6, 5

インデックスを指定しないpop()は最後に追加された要素から取り出します。3回呼んだ後、stackは[3, 4]になります。

Q2queue = deque(["Eric", "John", "Michael"]) に append("Terry")・append("Graham") をしてから popleft() を2回呼ぶと、返る順は?

答え: 'Eric'、'John'

popleft()は先頭から取り出します。最初に追加した要素から出るので、先入れ先出しの順になります。

Q3上のキューの例で、popleft()を2回呼んだ後にキューに残っているのは?

答え: deque(['Michael', 'Terry', 'Graham'])

取り出されたEricとJohnを除いて、到着順にMichael、Terry、Grahamが残ります。

Q4公式チュートリアルがキューの実装にlistでなくcollections.dequeを勧める理由は?

答え: listの先頭の挿入・取り出しは全要素のシフトが必要で低速だが、dequeは両端の追加・取り出しが高速だから

公式チュートリアル5.1.2は、リストもキューとして使えるが、先頭への挿入・取り出しはすべての要素をシフトする必要があるため低速だと説明しています。

到達チェック

  • スタックとキューの取り出し順(後入れ先出し・先入れ先出し)を説明できる
  • pop()とpopleft()の取り出し位置を区別できる
  • listでキューを作ると低速になる理由を言える
  • 公式チュートリアルの2つの例の出力を、順に再現できる

同じ資格で次に知りたいこと

よくある質問

Qlistでキューは作れない?

A

作れます。公式チュートリアル5.1.2は、リストもキューとして使えると述べたうえで、先頭の挿入・取り出しは低速なので、キューの実装にはcollections.dequeを使うよう案内しています。

Qpop()に引数を渡さないとどの要素が取り出される?

A

最後の要素です。公式チュートリアル5.1.1は、スタックの一番上から取り出すにはpop()をインデックスを指定せずに使うと説明しています。

Qdequeのpopleft()は何を返す?

A

先頭の要素です。公式チュートリアルの例では、popleft()を2回呼ぶと'Eric'、'John'の順に返ります。

Qスタックとキューの違いは?

A

スタックは最後に追加された要素が最初に取り出されるlast-in, first-out、キューは最初に追加された要素が最初に取り出されるfirst-in, first-outです。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)