<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「pop」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/pop/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Tue, 25 Nov 2025 21:09:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「pop」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】dequeでキューやスタックを実現する（collections.deque）</title>
		<link>https://tech.nkhn37.net/python-collections-deque/</link>
					<comments>https://tech.nkhn37.net/python-collections-deque/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Sat, 20 Feb 2021 00:00:00 +0000</pubDate>
				<category><![CDATA[collections]]></category>
		<category><![CDATA[append]]></category>
		<category><![CDATA[appendleft]]></category>
		<category><![CDATA[deque]]></category>
		<category><![CDATA[FIFO]]></category>
		<category><![CDATA[LIFO]]></category>
		<category><![CDATA[pop]]></category>
		<category><![CDATA[popleft]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[stack]]></category>
		<category><![CDATA[キュー]]></category>
		<category><![CDATA[スタック]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=1085</guid>

					<description><![CDATA[Pythonでキューやスタックを実現する際に利用できる collections モジュールの deque について解説します。 キュー（queue）とスタック（stack） deque の定義や使い方の説明の前にキュー  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Pythonでキューやスタックを実現する際に利用できる <span class="jinr-d--text-color d--marker1 d--bold"><code>collections</code></span> モジュールの <span class="jinr-d--text-color d--marker1 d--bold"><code>deque</code></span> について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold" id="キュー-queue-とスタック-stack">キュー（queue）とスタック（stack）</h2>



<p><code>deque</code> の定義や使い方の説明の前に<span class="jinr-d--text-color d--marker1 d--bold">キュー (queue)</span> と <span class="jinr-d--text-color d--marker1 d--bold">スタック (stack)</span> について簡単に説明しておきます。キューやスタックについてご存じの方は読み飛ばしていただいて結構です。</p>



<p>キューとスタックは、データ格納と取り出しに関するデータ構造の一種となっています。それぞれの概要をまとめると以下のようになります。また、キューとスタックの概要図も示します。</p>



<figure class="wp-block-table is-style-regular"><table><thead><tr><th>名称</th><th>内容</th></tr></thead><tbody><tr><td>キュー（queue）</td><td>先入れ先出し（<strong>FIFO</strong>: First In First Out）で管理するデータ構造</td></tr><tr><td>スタック（stack）</td><td>後入れ先出し（<strong>LIFO</strong>: Last In First Out）で管理するデータ構造</td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="592" height="406" src="https://tech.nkhn37.net/wp-content/uploads/2023/03/image-12.png" alt="キュー(queue)とスタック(stack)" class="wp-image-7730" style="width:444px;height:305px" srcset="https://tech.nkhn37.net/wp-content/uploads/2023/03/image-12.png 592w, https://tech.nkhn37.net/wp-content/uploads/2023/03/image-12-300x206.png 300w" sizes="(max-width: 592px) 100vw, 592px" /></figure>
</div>


<p>キューは最初に入れたデータから順に取りだすデータ構造で、よく先頭の人から順番に対応される待ち行列の話で説明がされます。上記図でいうと ① → ② の順で入れたデータは、① → ② の順でデータが取り出されます。先入れ先出しであることから <span class="jinr-d--text-color d--marker1 d--bold">FIFO (First In First Out)</span> と言います。</p>



<p>一方で、スタックはキューとは逆で最後に入れたデータから順に取り出すデータ構造です。上記図でいうと ① → ② の順で入れたデータは ② → ① の順で取り出されます。後入れ先出しであることから <span class="jinr-d--text-color d--marker1 d--bold">LIFO (Last In First Out)</span> と言います。</p>



<p>キューやスタックといったデータ構造を Python で実現しようとする場合、<code>list</code> 型の <code>insert</code> や <code>pop</code> を利用した実現を考えることができます。しかし、<code>list</code> 型は追加・削除で要素の移動が伴う可能性があるため、処理が非効率となる可能性があります。</p>



<p>効率的にキューやスタックを実現するために Python の <span class="jinr-d--text-color d--marker1 d--bold"><code>collections</code></span> モジュールの <span class="jinr-d--text-color d--marker1 d--bold"><code>deque</code></span> が使用できます。</p>



<p>この記事では、<code>deque</code> を用いたキューやスタックの実現方法について紹介します。</p>



<h2 class="wp-block-heading jinr-heading d--bold" id="deque-collectionsモジュール"><code>deque</code>（<code>collections</code> モジュール）</h2>



<p>キューやスタックの実装を例に <span class="jinr-d--text-color d--marker1 d--bold"><code>deque</code></span> の使い方を紹介していきます。<code>deque</code> という名称は、「<span class="jinr-d--text-color d--marker2 d--bold">d</span>ouble <span class="jinr-d--text-color d--marker2 d--bold">e</span>nded <span class="jinr-d--text-color d--marker2 d--bold">que</span>ue（両端キュー）」からきていて、デックと呼ばれます。</p>



<p><code>deque</code> は内部的には 2 重のリンクリストとして実現されています。イメージの図にしてみると以下のようになります。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="239" src="https://tech.nkhn37.net/wp-content/uploads/2021/02/image-47-1024x239.png" alt="deque appendleft append popleft pop" class="wp-image-1191" srcset="https://tech.nkhn37.net/wp-content/uploads/2021/02/image-47-1024x239.png 1024w, https://tech.nkhn37.net/wp-content/uploads/2021/02/image-47-300x70.png 300w, https://tech.nkhn37.net/wp-content/uploads/2021/02/image-47-768x179.png 768w, https://tech.nkhn37.net/wp-content/uploads/2021/02/image-47.png 1248w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>各要素は、要素同士の双方向のリンクを持っていて相互に参照することができます。そのため、要素へのアクセスは先頭または末尾からリンクをたどってアクセスします。</p>



<p>メソッドとしては以下が用意されています。</p>



<figure class="wp-block-table is-style-regular"><table><thead><tr><th>メソッド名</th><th>概要</th></tr></thead><tbody><tr><td><code>append(x)</code></td><td><code>x</code> を末尾に追加する</td></tr><tr><td><code>appendleft(x)</code></td><td><code>x</code> を先頭に追加する</td></tr><tr><td><code>pop()</code></td><td>末尾から値を取得し、削除する</td></tr><tr><td><code>popleft()</code></td><td>先頭から値を取得し、削除する</td></tr><tr><td><code>clear()</code></td><td>全ての値を削除する</td></tr></tbody></table></figure>



<p>図と対応させてみると分かりやすいですが、データを追加する場合は <span class="jinr-d--text-color d--marker1 d--bold"><code>append</code></span>、データを取り出すときが <span class="jinr-d--text-color d--marker1 d--bold"><code>pop</code></span> です。なお、先頭の場合は <span class="jinr-d--text-color d--marker1 d--bold"><code>appendleft</code></span>、<span class="jinr-d--text-color d--marker1 d--bold"><code>popleft</code></span> のように <code>left</code> がつきます。図のように先頭が左という考え方になります。</p>



<p><code>deque</code> は、前後のリンクを持っている構造上、<span class="jinr-d--text-color d--marker1 d--bold">先頭や末尾へのアクセスや追加／削除は早いですが、データの中央に近づくほどアクセスに時間がかかってしまう特徴がある</span>ことを覚えておきましょう。</p>



<p>以降では、<code>deque</code> を用いたキュー（queue）とスタック（stack）の実装例を紹介します。上記図のイメージを持って確認してもらうと理解がしやすいかと思います。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="キュー-queue-操作の実現"><code>deque</code> によるキュー（queue）操作</h3>



<p>キュー (queue) の操作を <code>deque</code> を使用して実現するには以下のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections

# dequeの作成
data = collections.deque()

# データの追加
data.append(10)
data.append(20)
data.append(30)
data.append(40)

# 先頭からのデータ取り出し
print(data)
print(data.popleft())
print(data)
print(data.popleft())
print(data)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
deque([10, 20, 30, 40])
10
deque([20, 30, 40])
20
deque([30, 40])</pre>



<p><code>deque</code> を使用するために <code>collections</code> モジュールのインポートが必要です。<code>collections.deque()</code> で <code>deque</code> のインスタンスを生成して使用します。</p>



<p>キューは、先入れ先出しの FIFO (First In First Out) ですので、データの追加は末尾にデータを追加する <span class="jinr-d--text-color d--marker1 d--bold"><code>append</code></span> メソッドを使用し、データを取り出すには先頭からデータを取り出す <span class="jinr-d--text-color d--marker1 d--bold"><code>popleft</code></span> メソッドを使用します。</p>



<p>このように <code>deque</code> を使用するとキューの操作を簡単に実現することができます。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="スタック-stack-操作の実現"><code>deque</code> によるスタック（stack）操作</h3>



<p>スタック (stack) の操作を <code>deque</code> を使用して実現するには以下のようにします。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import collections

# dequeの作成
data = collections.deque()

# データの追加
data.append(10)
data.append(20)
data.append(30)
data.append(40)

# 末尾からのデータ取り出し
print(data)
print(data.pop())
print(data)
print(data.pop())
print(data)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
deque([10, 20, 30, 40])
40
deque([10, 20, 30])
30
deque([10, 20])</pre>



<p>スタックは、後入れ先出しの LIFO (Last In Last Out) ですので、データの追加は末尾にデータを追加する <span class="jinr-d--text-color d--marker1 d--bold"><code>append</code></span> メソッドを使用し、データを取り出すには末尾から取り出す <span class="jinr-d--text-color d--marker1 d--bold"><code>pop</code></span> メソッドを使用します。</p>



<p>このように <code>deque</code> を使用するとスタックの操作を簡単に実現することができます。</p>



<h3 class="wp-block-heading jinr-heading d--bold" id="dequeでのメソッド利用に関する注意点"><code>deque</code> の使用に関する注意点</h3>



<p><code>deque</code> には、上記で紹介してきたような <code>append</code>、<code>pop</code> 等の操作の他に、<code>insert</code>、<code>remove</code>、<code>index</code> 等のメソッドをサポートしています。</p>



<p>しかし、<code>deque</code> は構造上、<span class="jinr-d--text-color d--marker1 d--bold">先頭や末尾への操作は非常に高速ですが、それ以外の操作は不得意</span>です。そのため、<code>insert</code>、<code>remove</code>、<code>index</code> などの操作を頻繁に使用するプログラムの場合はリストの方がデータ構造としては適しています。</p>



<p>要素数がそれほど多くない場合には、リストでも <code>deque</code> でもそれほど処理速度の差はないため、多くのアプリケーションではリストで問題ない可能性もあります。しかし、適切なデータ構造を選択するというのはプログラマとして重要な観点ですので、よく検討して <code>deque</code> を活用するようにしてください。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p>Pythonでキューやスタックを実現する際に利用できる <span class="jinr-d--text-color d--marker1 d--bold"><code>collections</code></span> モジュールの <span class="jinr-d--text-color d--marker1 d--bold"><code>deque</code></span> について解説しました。</p>



<p><code>deque</code> は「double ended queue（両端キュー）」のことで、各種メソッドが用意されているため、キューやスタックの操作が簡単に実現できます。</p>



<p><code>deque</code> は構造上、先頭や末尾への操作は非常に高速ですが、それ以外の操作は不得意という特徴があります。データの途中の要素に頻繁にアクセスすることが必要な場合にはリストのが適していますので、<code>deque</code> の使用が妥当であるかは想定する操作にあわせてよく検討してください。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p><code>deque</code> の公式ドキュメントは<a href="https://docs.python.org/ja/3/library/collections.html#deque-objects" target="_blank" rel="noreferrer noopener">こちら</a>を参照してください。</p>
</div>
		</div></section>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p>上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/collections/deque" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-collections-deque/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-04-15 05:45:40 by W3 Total Cache
-->